Blog · Build It Yourself

How I Replaced a $500-a-Year QuickBooks Subscription With a Single Plan

Let me start off with, I am not an accountant. But I have a single-member LLC, I file a Schedule C, and for years I paid $38 a month for QuickBooks to do the bookkeeping while outsourcing the maintenance. Eventually, I decided it was time to replace it. But with what? In one day I did so with a native Mac app I built from a Plan using Claude/Codex and ChatGPT. The plan is the part worth sharing, and I will give it to you.

By Michael Pierce · MDPSync · June 24, 2026

9 min read

The Friction

I run a side business as a single-member LLC, the kind of operation that earns a little, spends steadily, and at the end of the year collapses into a Schedule C attached to my personal return. That is the whole shape of it. QuickBooks treated it like something much larger, a company that needed a general ledger, a chart of accounts I had not designed, and a vocabulary I had to look up every time I opened it, and for that I was paying $38 a month, about $456 a year, to run software I could never quite drive on my own.

What I actually needed was narrow, and I could describe all of it in a breath: pull the transactions from my bank and card accounts, sort each one into a category that maps to a Schedule C line, let me fix the few the machine gets wrong and remember those corrections so it never asks again, show me where the money went across the year, and produce a clean export my accountant could open in January. Invoicing sat on top of that, because I bill customers and have to send them something. None of it requires a double-entry accounting package, and yet every part of it was buried under features I would never touch.

From a Prompt to a Plan

I did not start by writing code. Before a single line, I wrote the brief, and I did not write it alone: I asked ChatGPT to play a senior accounting consultant and draft a starting plan for someone in exactly my position, a non-accountant running a single-person LLC who files a Schedule C and wanted something simpler than QuickBooks but no less correct. The prompt I gave it was short and plain.

The Seed Prompt
I am not an accountant. I have a side business that is a single-person LLC, and I file a Schedule C. I use QuickBooks, but I need something I can understand. As a senior accounting consultant, write a plan I can use as a starting point to build a simple, understandable accounting application. It should take in data from an MCP connected to my accounts, categorize transactions, and give me dashboards and reporting. Assume it needs to be an effective replacement for QuickBooks.

That produced a first plan, which I took to Claude and had built into the real thing, a full implementation plan with an architecture, a data model, a domain layer, and an ordered milestone sequence. Then the whole document went back through review, because the first draft of anything is the one most likely to be hiding a wrong assumption. Codex read it as a critic and found the gaps, I handed that critique to Claude's UltraPlan for a final pass, and we went back and forth for a couple of hours until the plan was tight enough to run in one shot instead of in a dozen corrective rounds.

The point of all that refinement was to spend the thinking up front. A plan that has already survived two independent reviews builds in a few hours and does not need to be argued with halfway through. I ran it, and by the end of the day I had an app good enough to cancel the subscription. The couple of days after that were customization and one piece of setup: wiring up the data feed that pulls my accounts.

What I Built

What ran out of that plan is a native macOS app with one job and a strict boundary drawn around it. Everything financial lives in a single SQLite file on my Mac, and that file, not a server and not a cloud account, is the only source of truth. The app never talks to my bank, never moves money, and holds no API keys of any kind, because it is read-only toward every institution by design and has no code path to be anything else.

The mdpBooks business dashboard showing year-to-date net income, account reconciliation, a monthly net chart, an expense-share donut, and expenses broken down by Schedule C line. Dollar figures and the company name are blurred for privacy.

The business dashboard: year-to-date net, account reconciliation, spend by category, and a Schedule C line breakdown. Dollar figures and the company name are blurred.

Figure 1: mdpBooks System Architecture MDPBOOKS — SYSTEM ARCHITECTURE INSTITUTIONS Bank & Card Accounts Checking (asset) · Card (liability) • Balances and transactions • Read access only • No write path exists • The app never connects here YOUR MONEY, ELSEWHERE RUNS OUTSIDE THE APP Sync Bridge Node + MCP · nightly job • MCP pull (OpenBudget) • Builds ImportBundle JSON • Model categorizes new rows • Holds the only secret THE NETWORK EDGE LOCAL-FIRST mdpBooks (macOS) SwiftUI · GRDB SQLite • One SQLite file = truth • Rules + review queue • Schedule C reports + CSV • Invoicing, siloed from books ON MY MAC read-only MCP pull one-way file ImportBundle JSON LOCAL-FIRST BOUNDARY The app makes no network calls and holds no API secrets The only secret is the categorizer key, and it lives in the bridge Nightly flow: MCP pull → build bundle → categorize new rows → ImportBundle JSON → ingest → review queue → Schedule C reports Reconcile preserves every decision you have made; a re-pull never overwrites your categories

The sync bridge

The only code that touches the network lives outside the app. A small Node job runs on a schedule, uses an MCP connected to my institutions (built on OpenBudget) to pull the last few weeks of activity, and writes a plain JSON file in a fixed shape. The app only ever reads that file. A cheap, fast model suggests a category for each genuinely new transaction, and the rule engine handles the repeats so the model rarely runs. The only secret in the whole system is that model's key, and it never enters the app.

Categorize, then review

Deterministic rules run first, the model fills in genuinely new merchants, and everything uncertain lands in a one-card-at-a-time review queue. When I correct a category, the app mints a rule from that decision, so the same merchant is never asked about twice. Transfers and credit-card payments are detected and held out of the reports, which is the defense against double-counting: a card purchase is an expense once, when it is charged, and the later payment is a transfer on both legs and counts as neither.

The model step uses your Anthropic API key. When a new business appears for the first time, the sync job sends its name to Claude, which returns the right Schedule C bucket — a restaurant becomes Meals, a hotel becomes Travel & Lodging, a software subscription becomes Office Expense. That call happens once per merchant; after that, the saved rule handles every future charge from the same place automatically.

Schedule C, dashboards, and the January export

Every income and expense category maps to a real Schedule C line, zero-padded so the summary sorts in the order the form uses rather than the order a plain string sort would impose. The dashboard shows year-to-date net, the months as a trend line, where the money went as a category donut, and a Schedule C readiness view, and every report exports to CSV, with the full transaction export standing in as the file my accountant gets in January. There is no reconciliation ritual and no closing of the books behind any of it, only the numbers arranged in the shape the tax form asks for them.

Invoicing, kept separate

The app also bills customers and renders a formatted PDF, but invoicing never posts to the ledger. On cash basis the income is recognized when the deposit lands and arrives through the normal sync, so an invoice that also booked income would double-count against that deposit. Invoices stay billing documents with their own status, and an automated test proves that creating, sending, and paying one never moves a single number in the books.

The Math

Here is the part that pays for itself. QuickBooks was $38 a month, which comes to about $456 a year, and the replacement costs nothing to run except the one piece I cannot build myself, a paid MCP that connects to my financial institutions for $60 a year. The build was a single day of my time against a plan I already trusted, and everything that came out of it, the categories and the rules and the reports, is mine to change whenever I want, with no subscription sitting in the background waiting to lapse.

Was paying
$456/yr
QuickBooks, $38/mo
Now paying
$60/yr
Account data feed (MCP)
Build time
1 day
Against a reviewed plan

The Plan, in Full

The seed prompt above is where it started. The document below is where it ended up: the plan that would let a model rebuild this app from an empty folder. It carries the architecture, the data model and its migration chain, every domain engine and the rules they got wrong the first time, the sync bridge, the milestone order, and the decisions worth defending. It uses placeholders everywhere a real deployment used private values, so there are no account numbers, no keys, and no bank data in it. Copy it, hand it to Claude or Codex or Cursor, and adapt it to your own situation.

The Plan has been sanitized, so you may have some lift in making it personal by needing to add your own API Keys, install your own MCP and configure your data source (I used OpenBooks and Truthifi as not one tool connected with all my institutions).

Then Personal, Too

Once the business side worked, the same plan had an obvious second use. I was also paying for Quicken Simplifi, $68 a year, to watch my personal accounts. The app I had just built already knew how to pull accounts, categorize transactions, and chart where the money went. The only thing it did not do was keep personal and business apart.

So I added a second silo. The business books and the personal books now live in the same app and on the same machine but never touch, each carrying its own accounts, categories, dashboards, and review queue, so that business spending maps to Schedule C lines while personal spending stays ordinary household money that answers to no tax form. I open one app instead of two, and the second subscription is gone.

The arithmetic is the whole point. QuickBooks and Simplifi together were $456 and $68, which is $524 a year, for two tools I rented and did not control. The replacement costs $60 a year for the one thing I cannot build myself, the data feed. Everything else is a plan and an afternoon.

Two subscriptions
$524/yr
QuickBooks + Quicken Simplifi
One app
$60/yr
Business and personal, siloed
Kept every year
$464/yr
And software I own

Mobile App Companion

The Mac app handles everything, but I wanted a quick read on the go. A simple side-loaded companion app was straightforward to add — a lightweight dashboard pulling from the same data source, surfacing a snapshot of both the business and personal totals without any of the entry or review mechanics. Now I can check where I stand financially from my phone in a few seconds, without opening a laptop.

The Bigger Point

The part I actually care about is not the app, it is the plan. The code took a day, but the plan took the thinking, and the thinking is the part worth keeping and worth handing to someone else. We are moving toward a world where a well-made plan is the valuable, tradeable artifact and the build is the cheap, almost mechanical step that follows from it.

That changes who gets to own their software. A refined prompt and a reviewed plan let one person build something they would otherwise rent for years, and the plans themselves will be traded, forked, and uploaded as open-source starting points the way libraries are now, so the people who write good ones end up saving everyone else the months of false starts. I built a QuickBooks replacement from a plan in a day, and that plan is one button up the page, yours to take and make your own.

  • Software you own instead of rent
  • A plan you can re-run, fork, and hand to the next person
  • Privacy by default, because the books never leave your Mac
  • Refinement up front instead of correction halfway through

The leverage was never in the typing. It was in deciding to write the plan, and in refining it until it was worth running.

Have a subscription you would rather own?

mdpBooks is a personal project, but the method travels. If you are renting software that does eighty percent of what you need and frustrates you with the other twenty, the plan above is a place to start.