Skip to content

Repository files navigation

Obsidian Subscription Tracker

Stop forgetting what you're paying for.

A subscription tracker built entirely inside Obsidian using the Bases plugin. Each subscription is a note. Bases does the math. You see the full picture.

Table view — all subscriptions with auto-calculated costs

What it does

  • Tracks every subscription in one table — price, cycle, next payment, category
  • Auto-calculates next payment date, $/month, $/year, total spent since start
  • Multi-currency — pay in THB, VND, USD, whatever. Everything gets normalized to USD for comparison
  • Calendar view — see what renews this week at a glance. No surprise charges
  • One template — add a new subscription in 30 seconds

How it works

Every subscription is a plain Markdown note with frontmatter:

product: Netflix Premium
startDate: 2025-12-03
cycle: 1M
currency: VND
price: 273000
category: Entertainment

That's it. No plugins beyond Bases. No code to run. The .base file contains all the formulas — next payment date, monthly cost in USD, total spent, active/ended status.

Single subscription note with frontmatter properties

Multi-currency support

If you pay for things in multiple currencies (hello, digital nomads), there's a CurrencyRates.md file that holds exchange rates in frontmatter. Bases formulas pull them automatically and convert everything to USD.

CurrencyRates note with exchange rates in frontmatter

Rates can update automatically via a Claude Code hook — a Python script hits a free API (no keys needed) on every session start. The script, the hook config, and the bash wrapper are all in .claude/. You can also just update the rates by hand once a month, no big deal.

Calendar view

One look and you know what renews this week.

Built with Bases Calendar, a community plugin that adds calendar views to Bases.

Calendar view showing upcoming subscription renewals

Quick start

Prerequisites

Setup

  1. Clone or download this repo into your vault (or copy the files manually):

    git clone https://github.com/fkonovalov/obsidian-subscription-tracker.git
    
  2. Open the folder as an Obsidian vault (or merge into your existing vault)

  3. Open Subscriptions.base — you'll see the table with example subscriptions

  4. Add your own subscriptions:

    • Use the template in Templates/Subscription.md
    • Or duplicate an example note in Subscriptions/ and edit the frontmatter
  5. Update currency rates (if you use non-USD currencies):

    • Edit Assets/CurrencyRates.md frontmatter manually, or
    • Set up the auto-updater (see below)

Auto-updating currency rates (optional)

The .claude/ folder includes a Python script + Claude Code scheduled task that fetches rates from a free API once a day. No API keys needed.

File structure

obsidian-subscription-tracker/
├── README.md
├── LICENSE
├── Subscriptions.base          ← the main table (open this in Obsidian)
├── Templates/
│   └── Subscription.md         ← template for new subscriptions
├── Assets/
│   └── CurrencyRates.md        ← exchange rates (USD, THB, VND)
├── Subscriptions/
│   ├── Example - Netflix.md
│   └── Example - YouTube Premium.md
├── .claude/                    ← auto-update hook for currency rates
│   ├── settings.json
│   ├── hooks/
│   │   └── update-currency-rates.sh
│   └── scripts/
│       └── currency-updater.py
└── Screenshots/

Adding a new subscription

  1. Create a new note in Subscriptions/
  2. Use the template (Templates/Subscription.md) or copy-paste this frontmatter:
---
type: subscription
product: Service Name
platform: Company
category: Entertainment
startDate: 2026-01-01
endDate:
cycle: 1M
currency: USD
price: 9.99
url: https://example.com
account: your-email@example.com
account-holder: Your Name
notes:
tags:
  - subscription
---

Cycle format: 1M = monthly, 1y = yearly, 7d = weekly, 3M = quarterly

To cancel a subscription: set endDate to the last day of service. The tracker will automatically move it to "ended" status.

Formulas reference

The Subscriptions.base file calculates everything automatically. Here's what each formula does:

Formula What it does
next-payment-date Next renewal date based on start date + cycle
status "renews in X days" / "ends in X days" / "ended" / "lifetime"
pricePerMonthUSD Monthly cost normalized to USD
pricePerYearUSD Annual cost normalized to USD
totalCostUSD Total amount paid since start date
usdRate Exchange rate pulled from CurrencyRates note
enabled Whether subscription is currently active

Credits

Built with Obsidian Bases — a ridiculously powerful plugin that deserves way more attention.

License

MIT — fork it, tweak it, track your subscriptions.

About

Track subscriptions in Obsidian with Bases. Auto-calculated payments, multi-currency conversion, calendar view.

Resources

Stars

14 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages