Help & FAQ

Everything you need to know about recording and interpreting your portfolio data.

Getting started

Exchanges: NYSE & NASDAQ (US), ASX (Australia), TSX (Canada), TWSE and OTC Market (Taiwan).

Currencies: AUD, USD, CAD, TWD.

For unlisted assets (private equity, ETFs not on a supported exchange), select Other as the exchange and enter prices manually. All amounts must still be in one of the four supported currencies so FX conversion can be applied.

The base currency is the currency used to consolidate all your holdings into a single view. Currently set to AUD in configs.py. To change it, open app.py and update the BASE_CURRENCY constant at the top of the file, then restart the app. Historical FX rates are fetched automatically for AUD, USD, CAD and TWD.

On the Trades or Incomes page, click Upload CSV. Your file must match the expected column order:

Trades: date, ticker, exchange, currency, fx, type, quantity, price, fees, note
Incomes: date, ticker, exchange, currency, fx, amount, tax_credit, fees, note

You can also download a template by clicking Download CSV from an existing page. Uploading a CSV replaces the entire file, so make sure it is complete.
Recording transactions

Trades — any event that changes your quantity held:
  • Buying or selling shares (BUY / SELL)
  • Stock splits, consolidations, or corporate restructure adjustments (ADJUSTMENT)
Incomes — cash settlements that do not change your quantity:
  • Cash dividends and distributions
  • Interest income
  • Capital return payments

Use ADJUSTMENT for corporate actions that change your share count without a purchase or sale:
  • Stock split: enter a positive quantity equal to the additional shares received, price = 0, fees = 0
  • Consolidation: enter a negative quantity equal to the shares removed, price = 0, fees = 0
Adjustments do not affect your cost basis or realised P&L — they only update your holding quantity.

A DRP has two components: an income event (dividend received) and a trade event (shares acquired with that dividend).

On the Add Income page, tick Add Dividend/Distribution Reinvestment Trade? and fill in the reinvestment date, quantity received, and per-share price. Sharefolio will save both records simultaneously.

Alternatively, record them separately: add the income on the Incomes page and the BUY trade on the Trades page.

The FX field is the exchange rate at the time of the transaction, expressed as Base Currency ÷ Asset Currency.

For example, if your base currency is AUD and you bought a USD stock when 1 AUD = 0.64 USD, the FX value would be 0.64.

This field is optional. Sharefolio automatically fetches historical FX rates from Yahoo Finance for the transaction date. You only need to supply a manual rate if you want to override the automatically fetched rate (e.g. the rate your broker actually applied).

Australian companies can attach franking credits (imputation credits) to dividends, representing company tax already paid. Enter the credit amount in the Tax Credit field when recording an income.

Sharefolio tracks these separately and includes them in your total income and total return calculations, so your portfolio returns reflect the full economic benefit.
Understanding your numbers

Commitment (shown as Total Contribution in some places) is the cumulative net cash you have invested — not just your current cost basis.

It tracks every time your cash balance would have gone negative (i.e. you spent money from outside the portfolio). Returns from dividends that are reinvested reduce the commitment, because that cash came from the portfolio itself, not from your pocket.

Return percentages are calculated against commitment, making them a true return on capital deployed metric.

Base Currency view — all assets are converted to your base currency (e.g. AUD) using historical exchange rates. This gives you a consolidated, single-currency view of your entire portfolio, including FX gain/loss.

Asset Currency view — each asset group is shown in its traded currency (e.g. US holdings in USD). Returns in this view reflect pure price performance without FX effects, so you can separate how much came from the asset vs the currency move.

Sharefolio fetches data from Yahoo Finance. If price data is unavailable for a given date (e.g. a new listing, weekend, public holiday, or delisted security), the last known price is carried forward.

If no price is ever available (e.g. unlisted asset), market value will show as 0 and unrealised P&L will not be calculated. Income and realised gains are still tracked correctly.

Sharefolio uses strict First In, First Out (FIFO) lot matching.

Each BUY creates a new lot with its adjusted cost price (including brokerage). When you SELL, the oldest lots are closed first. Realised P&L is recognised as each lot closes.

The remaining open lots continue to accumulate unrealised P&L against the current market price.
Troubleshooting

Yes, on first load (or after any trade/income change) Sharefolio fetches historical price and FX data from Yahoo Finance, which takes several seconds proportional to the number of tickers and the length of your history.

Asset names are cached in data/asset_names.json to avoid repeated lookups. Subsequent page navigations within the same session are fast because data is held in memory.

Sharefolio constructs the Yahoo Finance ticker as TICKER.EXCHANGE (e.g. BHP.AX, ENB.TO). US tickers are passed without a suffix (e.g. AAPL not AAPL.US).

If no data is returned:
  • Double-check the ticker symbol matches the Yahoo Finance symbol exactly (case-insensitive but spelling matters)
  • For Taiwan stocks, use TW (TWSE) or TWO (OTC) as the exchange
  • Verify the security was listed before your first recorded trade date