Files
actual/packages/cli
Matiss Janis AboltinsGitHubgithub-merge-queuegithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Matt FiddamanMats NilssonJuulzautofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
1f492387b7 🔖 (26.6.0) (#7947)
* 🔖 (26.6.0)

* Generate release notes for v26.6.0

* Generate release notes for v26.6.0

* Update check-spelling metadata

* Generate release notes for v26.6.0

* add release summary

* links

* Generate release notes for v26.6.0

* update links

* Generate release notes for v26.6.0

* Generate release notes for v26.6.0

* Generate release notes for v26.6.0

* add EB link

* Add initial docs for Enable Banking (#7961)

* Add initial docs for Enable Banking

* Delete upcoming-release-notes/7961.md

* [Docs] UI Budget automations & month-end cleanup (#7863)

* Add files via upload

* Create documentation for budget automation feature

Added documentation for the budget automation feature, detailing its functionalities, usage, and examples.

* Add files via upload

* Revise budget automation documentation for clarity

Updated the documentation for budget automation, enhancing clarity and consistency in the descriptions of features and options.

* [autofix.ci] apply automated fixes

* Update Markdown headers for budget automation section

* Add files via upload

* Improve formatting in budget automation documentation

Updated formatting and added line breaks for better readability in the budget automation documentation.

* [autofix.ci] apply automated fixes

* Fix HTML line breaks in budget-automation.md

Updated HTML line breaks from '&lt;/br&gt;' to '<br>' in budget automation documentation.

* Fix HTML line breaks in budget automation documentation

* Fix headings and formatting in budget-automation.md

Updated formatting and corrected headings in budget automation documentation.

* Add budget-automation to sidebar items

* Add files via upload

* Add files via upload

* Revise budget automation documentation

Updated budget automation documentation to clarify usage of notes templates and detailed instructions for month-end cleanup processes, including named pools and weight calculations.

* [autofix.ci] apply automated fixes

* Refactor budget automation documentation for clarity

Updated various sections for clarity and consistency, including grammar corrections and improved phrasing.

* [autofix.ci] apply automated fixes

* Enhance budget automation documentation

Updated budget automation documentation with new blog links and improved formatting.

* Fix links in budget-automation.md

Updated links in the budget automation documentation to remove 'docs' prefix for consistency.

* Revise budget automation documentation with updates

Updated images and text for budget automation documentation, including corrections and enhancements to clarity.

* Improve clarity and add save reminders in budget automation

Updated wording for clarity and added reminders for saving work.

* Update budget automation documentation for clarity

Clarify the process of handling leftover funds in the budget automation script.

* [autofix.ci] apply automated fixes

* Add 'overfund' and 'overfunded' to spelling expect list

* Update spelling expectations by removing 'overfunded'

Removed 'overfunded' from the spelling expectations.

* Add files via upload

* 'overfund' to 'overfunded'

First the bot tells me overfunded isn't needed if overfund is there. Now, it tells me that overfunded IS needed. I give up.

* Enhance budget automation documentation

Added new sections on automation adjustments, moved some sections around, added horizontal separators.

* Update images and descriptions in budget automation docs

* Add files via upload

* Add automation notes section to budget automation docs

Added a section on automation notes to document how automations, balance caps, and long-term goals can have associated notes for clarity and tracking.

* Add files via upload

* Update budget automation examples in documentation

* Add files via upload

* Apply suggestions from code review

Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>

* [autofix.ci] apply automated fixes

* Add 'unmigrate' to spelling expectations

* Improve clarity in budget automation documentation

Clarified descriptions for budget automation features and improved wording for better understanding.

* Correct spelling of 'unmigrate' to 'Unmigrate'

They are the same and github is punking me again.

* Clarify automation notes description

* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Fix typos in budget-automation documentation

Corrected typos and improved clarity in the budget automation documentation.

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>

---------

Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: Mats Nilsson <matni403@gmail.com>
Co-authored-by: Juulz <julesmcn@gmail.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-06-01 16:30:43 +00:00
..
2026-06-01 16:30:43 +00:00

@actual-app/cli

WARNING: This CLI is experimental.

Command-line interface for Actual Budget. Query and modify your budget data from the terminal — accounts, transactions, categories, payees, rules, schedules, and more.

Note: This CLI connects to a running Actual sync server. It does not operate on local budget files directly.

Installation

npm install -g @actual-app/cli

Requires Node.js >= 22.

Quick Start

# Set connection details
export ACTUAL_SERVER_URL=http://localhost:5006
export ACTUAL_PASSWORD=your-password
export ACTUAL_SYNC_ID=your-sync-id   # Found in Settings → Advanced → Sync ID

# List your accounts
actual accounts list

# Check a balance
actual accounts balance <account-id>

# View this month's budget
actual budgets month 2026-03

Configuration

Configuration is resolved in this order (highest priority first):

  1. CLI flags (--server-url, --password, etc.)
  2. Environment variables
  3. Config file (via cosmiconfig)
  4. Defaults (dataDir defaults to ~/.actual-cli/data)

Environment Variables

Variable Description
ACTUAL_SERVER_URL URL of the Actual sync server (required)
ACTUAL_PASSWORD Server password (required unless using token)
ACTUAL_SESSION_TOKEN Session token (alternative to password)
ACTUAL_SYNC_ID Budget Sync ID (required for most commands)
ACTUAL_DATA_DIR Local directory for cached budget data
ACTUAL_CACHE_TTL Cache TTL in seconds (default: 60)
ACTUAL_LOCK_TIMEOUT Budget-dir lock wait timeout in seconds (default: 10)
ACTUAL_NO_LOCK Set to 1 to disable budget-dir locking

Config File

Create an .actualrc.json (or .actualrc, .actualrc.yaml, actual.config.js):

{
  "serverUrl": "http://localhost:5006",
  "password": "your-password",
  "syncId": "1cfdbb80-6274-49bf-b0c2-737235a4c81f",
  "cacheTtl": 60,
  "lockTimeout": 10,
  "noLock": false
}

Security: Do not store plaintext passwords in config files (e.g. .actualrc.json, .actualrc, .actualrc.yaml, actual.config.js). Add these files to .gitignore if they contain secrets. Prefer the ACTUAL_SESSION_TOKEN environment variable instead of the password field. See Environment Variables for using a session token.

Global Flags

Flag Description
--server-url <url> Server URL
--password <pw> Server password
--session-token <token> Session token
--sync-id <id> Budget Sync ID
--data-dir <path> Data directory
--cache-ttl <seconds> Cache TTL; 0 disables caching (default: 60)
--refresh Force a sync on this call, ignoring the cache
--no-cache Alias for --refresh
--lock-timeout <secs> Lock wait timeout (default: 10)
--no-lock Disable budget-dir locking (use with care)
--format <format> Output format: json (default), table, csv
--verbose Show informational messages

Commands

Command Description
accounts Manage accounts
budgets Manage budgets and allocations
categories Manage categories
category-groups Manage category groups
transactions Manage transactions
payees Manage payees
tags Manage tags
rules Manage transaction rules
schedules Manage scheduled transactions
query Run an ActualQL query
server Server utilities and lookups
sync Refresh or inspect local cache

Run actual <command> --help for subcommands and options.

Examples

# List all accounts (as a table; excludes closed by default)
actual accounts list [--include-closed] --format table

# Find an entity ID by name
actual server get-id --type accounts --name "Checking"

# Add a transaction (amount in integer cents: -2500 = -$25.00)
actual transactions add --account <id> \
  --data '[{"date":"2026-03-14","amount":-2500,"payee_name":"Coffee Shop"}]'

# Export transactions to CSV
actual transactions list --account <id> \
  --start 2026-01-01 --end 2026-12-31 --format csv > transactions.csv

# Set budget amount ($500 = 50000 cents)
actual budgets set-amount --month 2026-03 --category <id> --amount 50000

# Run an ActualQL query
actual query run --table transactions \
  --select "date,amount,payee" --filter '{"amount":{"$lt":0}}' --limit 10

Amount Convention

All monetary amounts are integer cents when passed as input (flags, JSON):

CLI Value Dollar Amount
5000 $50.00
-12350 -$123.50

Output formatting: Table (--format table) and CSV (--format csv) output automatically converts cent values to decimal (e.g. 1665.00 instead of 166500). JSON output always returns raw cents for programmatic use.

Tips & Common Pitfalls

  • Split transactions: When summing or counting transactions, filter "is_parent": false to avoid double-counting. A split parent holds the total amount, and its children hold the individual parts — including both would count the total twice.

  • Rapid sequential requests: The CLI caches the budget locally (see Caching), so read-heavy scripts no longer need a single-query workaround by default. For very chatty scripts, run actual sync once and then use a long --cache-ttl for reads:

    actual sync
    actual --cache-ttl 3600 query run ...
    actual --cache-ttl 3600 accounts list
    
  • Uncategorized transactions: category.name is null for transactions without a category. Account for this when filtering or grouping by category.

  • No date sub-fields in AQL: date.month, date.year, etc. are not supported as query fields. To group by month, fetch raw transactions with a date range filter and aggregate locally in a script.

Caching

The CLI keeps a local copy of your budget so repeated commands don't hit the sync server on every call. Within the TTL (default 60 seconds), read commands (list, balance, query run, …) reuse the cached budget without a network round-trip. Write commands (add, update, set-amount, …) always sync with the server before and after the write.

  • actual sync — refresh the cache now.
  • actual sync --status — show how stale the local cache is.
  • actual sync --clear — delete the local cache; the next command re-downloads.
  • --refresh (or --no-cache) — force a sync on a single call.
  • --cache-ttl <seconds> — override the TTL for a single call (use 0 to disable caching).

Concurrency

The CLI takes a shared lock for reads and an exclusive lock for writes on the per-budget cache directory. Many parallel reads are safe; writes serialize. If another CLI process is holding the lock, subsequent invocations wait up to --lock-timeout seconds (default 10) before failing with an error. Pass --no-lock to opt out in trusted single-process setups.

Running Locally (Development)

If you're working on the CLI within the monorepo:

# 1. Build the CLI
yarn build:cli

# 2. Start a local sync server (in a separate terminal)
yarn start:server-dev

# 3. Open http://localhost:5006 in your browser, create a budget,
#    then find the Sync ID in Settings → Advanced → Sync ID

# 4. Run the CLI directly from the build output
ACTUAL_SERVER_URL=http://localhost:5006 \
ACTUAL_PASSWORD=your-password \
ACTUAL_SYNC_ID=your-sync-id \
node packages/cli/dist/cli.js accounts list

# Or use a shorthand alias for convenience
alias actual-dev="node $(pwd)/packages/cli/dist/cli.js"
actual-dev budgets list