Siri and Shortcuts

Five actions, on iPhone, iPad and Mac. Two of them read your journal and are free.

Every action appears in the Shortcuts app under Balance, in Spotlight, and to Siri by the phrase listed with it, so you can run one without building a shortcut first. They all work on the journal the app has open, whether that is the one Balance keeps for you or a file you opened yourself, and an entry written from a shortcut shows up in the app straight away.

Reading is free forever. The three actions that write need the full version, and the check runs before anything else happens, so a run that is not allowed to write never opens your journal at all.

Log Expense

writes · full version

“Log expense in Balance”

The short one, for the case that comes up every day: one expense, dated today, marked cleared, paid from the account set in Settings ▸ Default Account for Shortcuts (Assets:Checking until you change it).

Takes

  • Payee: who you paid.
  • Amount: text, like 19.99 or 19,99. The last “.” or “,” is read as the decimal point and anything before it as grouping, so the result never depends on which region your device is set to.
  • Expense Account: the whole name, like Expenses:Coffee.

Gives back

A confirmation only: “Logged $19.99 at Blue Bottle”. Nothing is handed to the next action.

Add Transaction

writes · full version

“Add transaction in Balance”, “Add a transaction to Balance”

The general write: any number of postings, any date, cleared or not. A salary split three ways, a transfer, a card payment, an opening balance.

Accounts and amounts are two lists rather than one block of text, because Shortcuts already has lists and building one from a Repeat is what people actually do. Every posting states its own amount here, nothing is filled in for you, and the postings have to add up to zero. The whole entry uses one commodity, the one your journal already uses. A priced posting, a balance assertion or a per-posting status is journal syntax, and that is what Append Journal Entry is for.

Takes

  • Payee: who the transaction is with.
  • Accounts: a list of account names.
  • Amounts: a list of amounts, one for every account, in the same order. Minus for money leaving.
  • Date: optional. Today when you leave it empty.
  • Cleared: on by default.

Gives back

A confirmation only: “Added Blue Bottle, 2 postings totalling $19.99”. Nothing is handed to the next action.

Append Journal Entry

writes · full version

“Append journal entry in Balance”, “Append an entry to Balance”

The escape hatch: a block of real journal text, one transaction per run. Balance hands it to the same parser the app uses, so everything the format allows works here, including an elided amount, a price with @ or @@, a balance assertion, a per-posting status and inline comments.

What lands in the file is the text you wrote: your alignment, your separators, your indentation, unchanged.

2026-09-03 Coffee Shop
    Expenses:Coffee    $4.50
    Assets:Checking

Takes

  • Transaction Block: a dated header line, then one indented posting per line. It is a multi-line field, and one line can never be a transaction.

Gives back

A confirmation only: “Appended Coffee Shop”. Nothing is handed to the next action.

Get Account Balance

reads · free

“Get account balance in Balance”, “Check my balance in Balance”

Reading your own books is never gated, in the app or out of it, so this action runs no purchase check at all and never changes the journal.

Takes

  • Account: the whole name, like Assets:Checking.
  • Include Sub-Accounts: on by default, so Expenses totals everything under it.
  • As Of: optional. Today when you leave it empty.

Gives back

Text, both as the result the next action can use and as the spoken line “Balance of Assets:Checking: $995.50”. One figure per commodity, comma separated, never added together; an account nothing has posted to reads “0”.

Get Report

reads · free

“Get report from Balance”, “Run a report in Balance”

The same two headline reports the app shows, as text. No purchase check, and nothing is written.

Takes

  • Report: Balance Sheet or Income Statement.
  • Start Date: the income statement’s start. The balance sheet ignores it.
  • End Date: the income statement’s end, and the balance sheet’s as-of date.

Gives back

A few lines of text. The balance sheet reads “Balance sheet as of …” then Assets, Liabilities and Equity; the income statement reads “Income statement, …” then Income, Expenses and Net. Signs read the way the in-app reports do, and totals stay per commodity.

Two shortcuts, written out

Steps rather than a link to download, so you can see what every action does before you build it, and change the account names to your own as you go.

Monday numbers

Reads only, so it works before you have bought anything.

  1. In the Shortcuts app, tap + and name the new shortcut Monday numbers.
  2. Add Date. It gives you Current Date.
  3. Add Adjust Date and set it to subtract 7 days from that. Shortcuts calls the result Adjusted Date.
  4. Add Get Report from Balance. Set Report to Income Statement, Start Date to Adjusted Date, End Date to Current Date.
  5. Add Show Notification and put the Report result in the body.
  6. Optional: in the Automation tab, add a personal automation for Time of Day, Monday at 08:00, running Monday numbers immediately.

Pay the card

Writes, so it needs the full version. It also shows the trick to the two parallel lists.

  1. New shortcut, named Pay the card.
  2. Add Ask for Input, type Number, prompt “How much did you pay?”. Shortcuts calls the result Provided Input.
  3. Add Text with two lines: Liabilities:Visa then Assets:Checking. Add Split Text below it, split by New Lines. Rename that result Accounts.
  4. Add a second Text with two lines: Provided Input, then a minus sign followed by Provided Input. Split it by New Lines as well, and rename that result Amounts. Renaming matters, because otherwise both results are called Split Text and you cannot tell them apart when you pick one.
  5. Add Add Transaction from Balance. Payee: Visa payment. Accounts: the Accounts variable. Amounts: the Amounts variable. Leave Date empty for today and Cleared on.
  6. Run it, type 200, and you get “Added Visa payment, 2 postings totalling $200.00”. What you owe on the card drops by 200, so does checking, and the entry adds up to zero.

What the refusals mean

An action that cannot do what you asked fails rather than half-doing it, so Shortcuts stops the workflow instead of carrying on as though the entry had been recorded. Siri reads the message out; the Shortcuts app shows it on the action.

Any action

Writing to your journal from Shortcuts needs the full version of Balance. Open Balance to unlock it.

The purchase check on the three writing actions. It runs first, before the entry is validated and before your journal is even opened, so a run that is not allowed to write costs nothing and touches nothing. If the App Store cannot be asked in time, the action goes ahead rather than telling someone who has already paid that they have not.

Couldn’t open your journal. Open Balance once, then try again.

The actions find the journal themselves, but they never create or seed one. This is what you get before the app has ever run. If the location itself cannot be resolved you get that error instead, in the same words the app would use.

Couldn’t save to your journal: …

The entry was fine and the write failed, with the system’s reason after the colon.

Add Transaction

Every transaction needs a payee.

The payee was empty, or only whitespace.

A transaction needs at least two postings: one account the money leaves, one it arrives in.

Fewer than two accounts in the list.

Balance got 3 accounts and 2 amounts. Give exactly one amount for every account.

The two lists are different lengths. They are read in parallel, so they have to match.

Every posting needs an account, like Expenses:Food.

One of the accounts in the list was blank.

Couldn’t read “two hundred” as an amount. Write it like 19.99, or -19.99 for money leaving.

There was no number in that entry of the amounts list.

Those postings don’t balance: … Change an amount so they add up to zero.

The engine’s own refusal, quoted, and it names the commodity and the gap: “Transaction is unbalanced in $: off by 10”.

“Expnses:Food” isn’t in your journal, and Balance can’t classify it. Start it with Expenses, Assets, Liabilities, Equity, or Income — like Expenses:Food.

The rule for a new account name, and it is the same on all three writing actions. An account your journal already uses passes whatever it is called; a name it has never seen has to start with a segment that says what kind of account it is, so a typo fails loudly instead of quietly writing a root that every report leaves out.

Append Journal Entry

Balance couldn’t read that as a journal entry: …

The parser refused the block, with its own reason after the colon. An entry whose postings do not add up lands here, as “Transaction is unbalanced in $: off by 10”.

There’s no entry there. Give a dated line like “2026-09-03 Coffee Shop”, then one indented posting per line.

The block was empty, or nothing but blank lines.

That’s 2 entries. Append one transaction at a time.

More than one transaction in the block.

Balance couldn’t read “…” as a transaction. Start the entry with a date, like “2026-09-03 Coffee Shop”, and indent each posting below it.

The parser could not model that line at all. It keeps such lines verbatim when it reads a whole journal, which is how your own directives survive a save, but this action refuses them: the promise it makes is that what it appends was checked.

That’s only a comment. A transaction starts with a date, not a “;”.

The whole block was a comment line.

That declares the account “Expenses:Coffee” rather than recording a transaction. Add or rename accounts in Balance itself.

The block was an account directive.

Get Account Balance

Which account? Give the whole name, like Assets:Checking.

The account was empty, or only whitespace.

“Expenses:Grocries” isn’t an account in your journal. Check the spelling, and give the whole name — Assets:Checking, not Checking.

Stricter than the rule for writing, deliberately. A write may name an account that does not exist yet, because the posting is what creates it. A read of one that does not exist would hand back a confident zero, and a wrong number is worse than a refusal.

Get Report

The start date is after the end date. Swap them, or leave one empty for everything up to the other.

Checked before the journal is opened, so a backwards range costs nothing and reports nothing.

Where this runs

Inside Balance, on your device, against the file on your disk. A shortcut cannot make the app send your journal anywhere: on the Mac it ships without the network entitlement, so the operating system denies it outbound access whatever any action asks for. You can check that yourself in about a minute.

Something here not matching what the app does? See Support.