A command-line interface for YNAB designed for LLMs and developers. JSON output by default with built-in filtering.
Requires Bun.
bun install -g @stephendolan/ynab-cli
# Or run without installing
bunx @stephendolan/ynab-cli budgets listLinux: requires libsecret for keychain storage
sudo apt-get install libsecret-1-dev # Ubuntu/Debian
sudo dnf install libsecret-devel # Fedora/RHEL
sudo pacman -S libsecret # ArchWithout libsecret, use YNAB_API_KEY environment variable instead.
ynab auth login # Store token in OS keychain
ynab auth status # Check authentication
ynab auth logout # Remove credentialsOr set YNAB_API_KEY environment variable.
ynab budgets list
ynab budgets view [id]
ynab budgets set-default <id>ynab accounts list
ynab accounts view <id>
ynab accounts transactions <id>ynab categories list
ynab categories view <id>
ynab categories budget <id> --month <YYYY-MM> --amount <amount>
ynab categories transactions <id># List with filters
ynab transactions list --account <id> --since <YYYY-MM-DD>
ynab transactions list --approved=false --min-amount 100
ynab transactions list --fields id,date,amount,memo
# Search
ynab transactions search --memo "coffee"
ynab transactions search --payee-name "Amazon"
# CRUD
ynab transactions view <id>
ynab transactions create --account <id> --amount <amount> --date <YYYY-MM-DD>
ynab transactions update <id> --amount <amount>
ynab transactions delete <id>
ynab transactions split <id> --splits '[{"amount": -50.00, "category_id": "xxx"}]'ynab payees list
ynab payees view <id>
ynab payees update <id> --name <name>
ynab payees transactions <id>ynab months list
ynab months view <YYYY-MM>ynab scheduled list
ynab scheduled view <id>
ynab scheduled delete <id>ynab api GET /budgets
ynab api POST /budgets/{budget_id}/transactions --data '{"transaction": {...}}'All commands return JSON. Use --compact for minified output.
Amounts are in dollars (not YNAB's internal milliunits). --min-amount 100 means $100.
The YNAB API does not support creating categories, category groups, or payees. Use the web or mobile app for these.
Rate limit: 200 requests/hour per token. If exceeded, wait 5-10 minutes.
MIT