Skip to content

Transaction Directive

Transactions are the primary directive in Ledger, representing transfers of value between accounts.

Syntax

DATE [=EFFECTIVE] [FLAG] [(CODE)] PAYEE [| NARRATION] [; COMMENT]
    POSTING...

Components

Date

The transaction date in one of the supported formats:

2024/01/15 Grocery Store     ; Canonical
2024-01-15 Grocery Store     ; ISO format
01/15 Grocery Store          ; Uses default year

Effective Date

An optional secondary date following =:

2024/01/15=2024/01/20 Scheduled Payment
    ; Posted on 01/15, effective 01/20
    Expenses:Bills  $100
    Assets:Checking

Use cases: - Checks with future effective date - Credit card purchases vs statement date - Scheduled payments

Transaction Flag

Optional status indicator:

Flag Meaning
* Cleared/reconciled
! Pending
(none) Unmarked
2024/01/15 * Cleared Transaction
    Expenses:Food  $50
    Assets:Checking

2024/01/15 ! Pending Transaction
    Expenses:Food  $50
    Assets:Checking

2024/01/15 Unmarked Transaction
    Expenses:Food  $50
    Assets:Checking

Code

Optional transaction code in parentheses:

2024/01/15 * (1234) Check Payment
    ; Check number 1234
    Expenses:Rent  $1500
    Assets:Checking

2024/01/15 * (ACH) Direct Deposit
    Assets:Checking  $2000
    Income:Salary

Common uses: - Check numbers - Reference numbers - Transaction IDs

Payee and Narration

The description can optionally have payee and narration separated by |:

2024/01/15 * Grocery Store | Weekly shopping
    ; Payee: "Grocery Store"
    ; Narration: "Weekly shopping"
    Expenses:Food  $50
    Assets:Checking

2024/01/15 * Just a description
    ; Entire string is payee/description
    Expenses:Food  $50
    Assets:Checking

Transaction Comment

End-of-line comment:

2024/01/15 * Grocery Store  ; Don't forget receipt
    Expenses:Food  $50
    Assets:Checking

Postings

Every transaction contains one or more postings:

2024/01/15 * Multi-posting Transaction
    Expenses:Food:Groceries     $30.00
    Expenses:Food:Snacks        $10.00
    Expenses:Household          $10.00
    Assets:Checking            $-50.00

Posting Format

    ACCOUNT  [AMOUNT] [@ PRICE | @@ TOTAL] [= BALANCE] [; COMMENT]

Elided Amount

One posting amount can be omitted; Ledger calculates it:

2024/01/15 * Transaction with elided amount
    Expenses:Food  $50.00
    Assets:Checking           ; Amount inferred as -$50.00

Multiple Elided Amounts

Only one amount can be elided per commodity:

; INVALID - two elided USD amounts
2024/01/15 * Bad Transaction
    Expenses:Food
    Assets:Checking

; VALID - different commodities
2024/01/15 * Currency Exchange
    Assets:USD               ; Elided USD
    Assets:EUR    50.00 EUR  ; Explicit EUR

Balance Assertions

Assert the account balance after this posting:

2024/01/15 * Reconciliation
    Assets:Checking  $100.00 = $1500.00
    ; After this posting, Checking should be $1500.00
    Income:Salary

Partial Balance Assertion

Assert balance for specific commodity only:

2024/01/15 * Deposit
    Assets:Brokerage  10 AAPL = 50 AAPL
    ; Assert 50 AAPL (ignoring other commodities)
    Assets:Checking  $-1500.00

Metadata

Transaction and posting metadata:

2024/01/15 * Grocery Store
    ; Project: home
    ; Category: food
    Expenses:Food  $50.00
        ; Receipt: IMG_001.jpg
        ; Tax-deductible: no
    Assets:Checking

Tags

Colon-delimited tags:

2024/01/15 * Business Trip
    ; :travel:business:tax-deductible:
    Expenses:Travel  $500
    Assets:Checking

Virtual Postings

Unbalanced Virtual

Postings in () don't affect transaction balance:

2024/01/15 * With Budget Tracking
    Expenses:Food      $50.00
    (Budget:Food)     $-50.00    ; Not balanced
    Assets:Checking

Balanced Virtual

Postings in [] must balance among themselves:

2024/01/15 * Savings Allocation
    Assets:Checking     $1000.00
    [Savings:Goal]     $-500.00
    [Savings:Emergency] $-500.00  ; These two must balance
    Income:Salary

Price Annotations

Per-unit Price (@)

2024/01/15 * Buy Stock
    Assets:Brokerage  10 AAPL @ $150.00
    Assets:Checking  $-1500.00

Total Price (@@)

2024/01/15 * Currency Exchange
    Assets:EUR    100 EUR @@ $110.00
    Assets:USD   $-110.00

Lot Specifications

Cost Basis

2024/01/15 * Buy with Cost
    Assets:Brokerage  10 AAPL {$150.00}
    Assets:Checking  $-1500.00

Lot Date

2024/01/15 * Buy with Lot Date
    Assets:Brokerage  10 AAPL {$150.00} [2024/01/15]
    Assets:Checking  $-1500.00

Lot Selection for Sales

2024/06/15 * Sell Specific Lot
    Assets:Brokerage  -5 AAPL {$150.00} [2024/01/15] @ $180.00
    Assets:Checking   $900.00
    Income:Capital-Gains

Examples

Simple Transaction

2024/01/15 * Grocery Store
    Expenses:Food:Groceries    $50.00
    Assets:Checking

Multi-currency

2024/01/15 * International Purchase
    Expenses:Shopping    100.00 EUR @ $1.10
    Assets:Checking     $-110.00

Complex Transaction

2024/01/15=2024/01/20 * (1234) Acme Corp | Monthly invoice payment
    ; Project: acme
    ; Invoice: INV-2024-001
    Expenses:Contractors     $5000.00
        ; Category: development
        ; Tax-deductible: yes
    Expenses:Tax             $500.00
    [Budget:Projects:Acme]  $-5500.00
    Assets:Checking                     = $10000.00

Validation Rules

  1. Balance: Real postings must sum to zero per commodity
  2. Elision: Maximum one elided amount per commodity
  3. Date: Must be valid date
  4. Accounts: Must be valid account names
  5. Amounts: Must be valid amount expressions

See Also