Oknola

Guides · For indie hackers

Tracking MRR, costs and launches in plain markdown

By Ricardo Cardona ·

Keep one markdown file per month for MRR, new and churned revenue, costs and runway, plus one file per recurring cost and one per launch, in a business folder beside your code. Stripe stays the record of payments, and the folder holds the numbers you run the business by and the reasons they moved, in fields an AI agent can add up.

What to record

Five things, once a month:

  • MRR, and how it moved. New, expansion, contraction and churned MRR. Net new MRR is new plus expansion, minus contraction and churn.
  • Customers. Paying at the start of the month, new and churned. Customer churn is churned divided by customers at the start.
  • Costs by vendor. Hosting, database, email, AI API usage, domains and tools. The usage-billed lines are the ones that surprise you.
  • Runway. Business cash divided by monthly net burn: costs plus what you pay yourself, minus revenue. If revenue covers both, write profitable.
  • Launches. The checklist before, and what the launch did after.

The folder and the monthly snapshot

One file per thing keeps each number in one place:

business/
  AGENTS.md
  money/
    snapshots/2026-09.md   one per month
    costs/ai-api.md        one per recurring cost
    costs/hosting.md
  launches/2026-10-annual-plan.md
  decisions/

The snapshot holds inputs in the fields at the top and reasons in the body. Store inputs, not totals: an agent derives month-end MRR, churn and runway, and a file can’t disagree with itself.

---
type: MonthlySnapshot
description: September 2026 close. Sample numbers.
tags: [Money, Business]
month: 2026-09
mrr_start: 3480
mrr_new: 420
mrr_expansion: 40
mrr_contraction: 0
mrr_churned: 190
customers_start: 182
customers_new: 21
customers_churned: 10
costs_paid: 460
owner_pay: 4000
cash: 12780
---
The annual plan went live on the 9th. Two of the ten who left asked for CSV export.

Read with those sample numbers: MRR ends at $3,750 (3,480 + 420 + 40 - 190), so net new MRR is $270. Ten of 182 customers left, a customer churn of 5.5%. Burn is $460 of costs plus $4,000 of pay, minus $3,750 of revenue: $710 a month, so $12,780 of cash is 18 months of runway.

Costs and launches, one file each

Each recurring cost gets a file, with the fields that make it add up:

---
type: Cost
description: AI API usage for in-app summaries. Sample numbers.
tags: [Money, Business]
vendor: Anthropic
category: ai
billing: usage
monthly_usd: 287
side: business
cancel_priority: must_have
active: true
---

side keeps business and personal apart when one card pays for both (separating the two). cancel_priority is the order you’d cut in a lean month, decided while you’re calm.

A launch gets a file too, with the checklist inside:

---
type: Launch
description: Annual plan launch. Sample.
tags: [Launch, Business]
date: 2026-10-14
status: planned
---
# Before
- [ ] Pricing page, checkout and onboarding emails match the new plan
- [ ] Changelog entry written
- [ ] Posts drafted for X, the newsletter and one community
# After, day 7
- [ ] Signups, trials and paid customers from the launch, in the next snapshot
- [ ] What people asked for, linked to the backlog

The after list is the one that gets skipped, and it’s the one that tells you whether to launch that way again.

Let an agent do the sums

Because the numbers sit in fields, any agent that reads files can do the arithmetic. Open Claude Code, Codex or Cursor in the folder and ask:

Read money/snapshots and money/costs. For the last six months, give MRR,
net new MRR, customer churn, costs and runway. Sum active costs by category.
List the files you used, and don't edit anything.

In the sample month, that sum puts AI usage at $287 of $460, about 62% of costs, which is the line to watch as signups grow. Ask for the file list every time, so you can check a number against its source before you act on it. For a figure you’ll quote, have the agent write a short script over the same fields, so the answer is the same every run.

Stripe or the folder?

Stripe keeps payments, subscriptions, invoices, refunds, failed-payment retries and customer billing details. It’s the record of money moving, and it stays that way.

The folder keeps the month’s numbers once you close it, costs from every other vendor, runway, launches and the reasons behind a change. Stripe can’t see your AI bill or why a customer left.

At month end, copy the numbers across from the dashboard or an export. Never copy card data or customer emails into the folder: a snapshot needs counts, not people.

Where Oknola fits

This is the folder Oknola keeps for indie SaaS builders: MRR next to the API and hosting bills, launches, customers and the decisions behind them, in plain markdown. Oknola types, tags and files what lands in it, so snapshots and costs keep the fields an agent adds up. Stripe stays, and Oknola keeps what its numbers mean for the business. Finance reads the same kind of files, with every subscription marked business or personal. What is available today is on the roadmap, and the demo shows it on sample data.

Questions people ask

Do annual plans count toward MRR?

Yes, as a twelfth of the price each month. Say a customer pays $190 for a year: that adds $15.83 of MRR, not $190 in the month the money lands.

Why not a spreadsheet?

A spreadsheet holds numbers well and reasons badly. A markdown file keeps both side by side, opens in any editor, shows each change in git, and an agent reads it without an export.

Is this accounting?

No. These are the numbers you run the business by. Your accountant still does the books.

How does Claude Code learn the latest numbers?

Put one line with them in your business context file, so Claude Code knows them before it touches pricing. A CLAUDE.md for your business has the template.

How Oknola works for indie hackers

Waitlist

Start with the folder.

The free app comes first, on macOS and Android. Early access opens in waves.

See it work

No spam. Early access news, nothing else.

You're on the list.

We'll write when your wave opens — and your answer just voted on the roadmap.

Check spam if nothing lands within a few minutes.