---
type: Guide
title: "Tracking MRR, costs and launches in plain markdown — Oknola"
description: "A simple way to track MRR, costs, runway and launches as an indie hacker: one markdown file per month, per cost and per launch, and an agent for the sums."
resource: https://oknola.com/guides/track-mrr-costs-launches-markdown/
---

[Guides](https://oknola.com/guides/) · For indie hackers

# Tracking MRR, costs and launches in plain markdown

By [Ricardo Cardona](https://oknola.com/about/) · September 21, 2026

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:

```text
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.

```markdown
---
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:

```markdown
---
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](https://oknola.com/guides/separate-business-and-personal-money/)). `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:

```markdown
---
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:

```text
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](https://oknola.com/use-cases/indie-hackers/): 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](https://oknola.com/apps/finance/) reads the same kind of files, with every subscription marked business or personal. [What is available today is on the roadmap](https://oknola.com/roadmap/), and [the demo](https://oknola.com/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](https://oknola.com/guides/claude-md-for-your-business/) has the template.

Ricardo Cardona

Builds Oknola, the company brain for one-person businesses. Ten years and 100+ business systems delivered for real companies. [About Oknola](https://oknola.com/about/)

[How Oknola works for indie hackers](https://oknola.com/use-cases/indie-hackers/)

Waitlist

## Start with the folder.

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