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 settings [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 update <id> [--name <name>] [--note <note>] [--category-group-id <id>] [--goal-target <amount>]
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 locations <id>
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 /plans
ynab api POST /plans/{plan_id}/transactions --data '{"transaction": {...}}'Run as an MCP server for AI agent integration:
ynab mcpAll 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 updating accounts. Use the web or mobile app for this.
The API supports creating payees, categories, and category groups. Use raw API access for these:
ynab api POST /plans/{plan_id}/payees --data '{"payee": {"name": "Coffee Shop"}}'Rate limit: 200 requests/hour per token. If exceeded, wait 5-10 minutes.
MIT