Skip to main content

Portfolio Export

Export Configuration

Commodity Declarations

; Regular Stock/ETF
2024-01-01 commodity AAPL
name: "Apple Inc."
export: "NASDAQ:AAPL"

; Mutual Fund
2024-01-01 commodity VTSAX
name: "Vanguard Total Stock Market Index Fund"
export: "MUTF:VTSAX"

; Cash Equivalent
2024-01-01 commodity USD
name: "US Dollar"
export: "CASH"

; Money Market Fund
2024-01-01 commodity VMMXX
name: "Vanguard Prime Money Market Fund"
export: "MUTF:VMMXX (MONEY:USD)"

; Ignored Asset
2024-01-01 commodity RSPCAD
name: "Retirement Savings Plan Contributions"
export: "IGNORE"

Export Types

TypeSyntaxPurpose
Direct"EXCHANGE:SYMBOL"Export as specific ticker
Cash"CASH"Convert to cash value
Money"SYMBOL (MONEY:CCY)"Cash equivalent instrument
Ignore"IGNORE"Skip from export

Export Process

Command Line Usage

# Basic export
bean-report ledger.beancount export_portfolio > portfolio.ofx

# Debug export process
bean-report ledger.beancount export_portfolio --debug 2>&1

# View help
bean-report ledger.beancount export_portfolio --help

Export Rules

  1. Default Behavior

    • Uses commodity name as ticker
    • Requires explicit exchange prefixes
    • Validates Google Finance symbols
  2. Cash Conversion

    • Requires recent price data
    • Aggregates all cash positions
    • Uses money market instruments
  3. Money Instruments

    • One per currency needed
    • Must price near currency unit
    • Used for cash position display

Exchange Symbology

Common Exchanges

; US Markets
export: "NYSE:IBM" # New York Stock Exchange
export: "NASDAQ:AAPL" # NASDAQ
export: "MUTF:VTSAX" # US Mutual Funds

; International
export: "TSE:XIN" # Toronto Stock Exchange
export: "LSE:HSBA" # London Stock Exchange

Special Cases

; Cash Equivalents
export: "MUTF:VMMXX (MONEY:USD)" # US Dollar
export: "MUTF_CA:IGI806 (MONEY:CAD)" # Canadian Dollar

; Alternative Assets
export: "CASH" # Convert to cash value
export: "IGNORE" # Skip from export

Implementation Details

OFX Export Format

<BUYSTOCK>
<INVBUY>
<INVTRAN>
<DTPOSTED>20240115</DTPOSTED>
<MEMO>Stock Purchase</MEMO>
</INVTRAN>
<SECID>
<UNIQUEID>NASDAQ:AAPL</UNIQUEID>
<UNIQUEIDTYPE>TICKER</UNIQUEIDTYPE>
</SECID>
<UNITS>100</UNITS>
<UNITPRICE>150.00</UNITPRICE>
</INVBUY>
</BUYSTOCK>

Position Handling

  1. Stock Positions

    • Exports as BUYSTOCK elements
    • Uses exchange-qualified symbols
    • Sets purchase date to T-1
  2. Mutual Funds

    • Exports as BUYMF elements
    • Requires MUTF prefix
    • Same data structure as stocks
  3. Cash Positions

    • Converts to money market
    • Aggregates by currency
    • Uses specified instruments

Best Practices

  1. Symbol Management
; Always use exchange prefixes
2024-01-01 commodity AAPL
export: "NASDAQ:AAPL" # Not just "AAPL"

; Document symbol sources
2024-01-01 commodity XIN
name: "iShares MSCI EAFE ETF"
export: "TSE:XIN" # Toronto Stock Exchange
reference: "BlackRock iShares"
  1. Cash Handling
; Define money market instruments
2024-01-01 commodity VMMXX
export: "MUTF:VMMXX (MONEY:USD)"
note: "Vanguard Prime Money Market"

; Mark currencies as cash
2024-01-01 commodity USD
export: "CASH"
  1. Validation
; Use commodity validation plugin
plugin "beancount.plugins.check_commodity"

; Regularly verify export output
bean-report ledger.beancount export_portfolio --debug

This guide provides a comprehensive overview of Beancount's portfolio export capabilities while maintaining technical accuracy.