Your investment journal

DividenNote

Your portfolio, dividends and income goals. Five markets, one base currency, saved in your browser.

How to use, check and interpret this tool ↓

Saved only in this browser. Back up before clearing site data or moving to another device.

Overview

Start your dividend journal

Add your first investment, or bring your existing records with a JSON backup.

Portfolio value

—

Total invested—

Est. annual yield on cost—
Est. annual gross dividends—

How this estimate is calculated

Annual estimates use your entered annual dividend per share. Net estimates apply the entered tax rate, before other fees.

Passive income goal

—
—

Estimated monthly net income

Based on your entered annual dividend estimates. Update the monthly target in Settings.

Received this month—

Payments to confirm0

Expected payments dated today or earlier. Open Dividends to review.

Monthly dividend income

Period total: —

ReceivedExpected

Select a bar for exact amounts. On small screens, swipe the chart horizontally.

What the chart includes

Annual includes recorded received payments and upcoming expected payments in the selected year. YTD includes only received payments through today. Next 12 months shows expected payments. Recorded settlement FX takes priority; otherwise reference FX is used.

View monthly amounts
MonthReceivedExpectedNet amount

Monthly review

Uses your selected market and base currency. This month selector is independent of the annual chart above.

Plan next month’s cashflow and emergency fund

Holdings

Refresh reference prices above or enter them manually. Each holding shows its price date. Open a card to edit the price or annual dividend estimate.

Record buy / sell

Existing lots are opening balances. Add only trades after those balances, otherwise the same purchase may be counted twice. The opening date is a cut-off, not a reconstructed trade history.

Buys include fees in weighted average cost. Sells reduce positions and retain realized gains. For one stock on one day, either record times for every trade or leave all times blank and enter trades in order. Equal times use saved order. Short sales and corporate actions are not supported.

Actual settlement FX (optional)

Enter the rate on your statement. Blank means unknown; current FX will not be saved as a historical rate. Same-currency settlement uses 1. Fees above must be in the stock currency.

Transactions

Realized gains use weighted average cost, including buy and sell fees. Settlement-currency gains appear only when both purchase costs and sale proceeds have recorded FX for that currency. “—” means insufficient history. Portfolio valuation still uses current reference FX.

Trade dateTicker / stock codeBuy / sellSharesPrice per shareTotal fees (stock currency)Realized gain / lossShares after tradeRecorded settlementActions
Add opening balance

Enter the shares and average cost held when you start this journal. Include purchase fees in the average cost. For later buys and sells, use Record buy / sell.

MYR

Average cost after this purchase: —

Total shares after purchase: —

Opening balances
Ticker / stock codeMarketName (optional)Opening balance date (optional)SharesCost per shareActions
Import trades · Moomoo / CSV

Choose a filled-trades CSV, then check each column. Moomoo export layouts vary; column suggestions are a starting point, not verified compatibility with every export. Only stock/ETF buys and sells are supported. Files are processed locally.

Dividends

Received payments grouped by payment month. Original-currency amounts stay unchanged; base-currency totals use recorded settlement FX where available, otherwise reference rates.

Add dividend

Enter the shares entitled to this payment, not necessarily today’s holdings. Tax is a percentage; fees are in the market currency. Expected payments are entered manually and must be marked received after you verify the actual amount.

Actual settlement FX (optional)

Enter the rate on your statement. Blank means unknown; current FX will not be saved as a historical rate. Same-currency settlement uses 1. Fees above must be in the stock currency.

MYR

Calculated net amount: —

All dividend records (including expected)
Payment dateTicker / stock codeMarketPayment statusGross amountNet amountActions

Dividend calendar & payment checks

Browse the dividends you recorded. Expected dates are entered manually, not fetched forecasts. This calendar follows the market filter and has its own month selector.

Dividends for the selected day

Monthly amounts use the selected base currency; — means a needed FX rate is missing. Received totals exclude future-dated records. Actual settlement is used when recorded; other conversions use reference FX. Due counts include today and earlier expected payments, across all months.

All unconfirmed payments — every date
Payment dateTicker / stock codeMarketNet amountPayment statusActions
Save preferences

The goal is a number in your chosen base currency. Changing currency does not convert the saved goal.

Conversion rates

Reference FX updates daily. Received dividends with a recorded settlement rate use it; other amounts use this snapshot. A different selected base currency requires reference conversion of the settlement currency.

Rates by ExchangeRate-API

Stock search & prices

Yahoo Finance reference prices may be delayed. Automatic refresh is optional and requires a working connection. Only stock codes or your search words are sent; shares, costs and dividend records stay in your browser. Prices refresh without changing dividend estimates.

Yahoo Finance
Price connection settings

The default service is included in the upload package and needs PHP 8.1+ with cURL. Use a service path on this website. Local file previews cannot connect; manual entry remains available.

Backup & restore

JSON restores opening balances, trades, settlement rates, dividends, prices and preferences. Earlier web and Android backups remain supported. CSV transaction import is under Holdings; CSV reports do not replace a full JSON backup.

How to keep a reliable dividend journal

Add current holdings, then record each payment from your statements. For example, 1,000 shares receiving 0.20 per share gives 200 gross. At 10% withholding and a fee of 2, net income is 178 in that market’s currency. These are fictional inputs, not current stock data or tax advice.

Five markets, one reporting currency

Five markets use MYR, USD, HKD, SGD and CNY. Choose one base currency. Current portfolio values use reference FX. Recorded settlement FX preserves received dividend amounts in its settlement currency; other bases use reference conversion. Missing rates produce an unavailable total, not a partial sum.

Local saving and backup limitations

English and Chinese pages share this journal on the same website origin. Different devices, browser profiles, private sessions, www/non-www hosts and local file previews may have separate storage. This is not an encrypted vault or cloud backup. The tool makes no network request for your records; emailed attachments and downloaded files are your responsibility. Avoid using shared devices for private records.

Import safely and keep the original

Review per-market counts before restoring. Keep the original Android backup. Imported annual estimates use saved price × entered yield percentage and remain editable. To repair an earlier web import, choose Fill missing prices & estimates only; existing records and values are preserved.

Net dividends = shares × dividend per share × (1 − tax / 100) − fees. Buys add price × shares + fees to cost; sells remove the weighted average cost of sold shares. Realized gain = sale proceeds − selling fees − removed cost. Existing lots are opening balances, not reconstructed trades. These records are not tax statements or investment advice.

Questions worth working through

A public dividend example

Suppose a fictional holding has 100 shares and pays MYR 0.20 per share. Gross dividends are MYR 20.00. With a hypothetical 10% withholding and MYR 1.00 fee, net receipts are MYR 17.00: 100 × 0.20 − 2.00 − 1.00. The tax and fee are examples, not a country’s tax rule.

Expected dividends remain unconfirmed until you check the receipt. Enter the actual payment date and net amount from your statement. This example is separate from your private journal and does not create any records.

Use the result with confidence

Build a record you can reconcile

Start with holdings and transactions, then add paid dividends separately from expected dividends. The base currency provides one reporting unit; the original market currency still matters. Import previews and backups help you inspect data before replacing a journal.

Why a total can be missing

A purchase cost does not provide a current share price or an annual dividend forecast. Missing prices, FX rates or dividend assumptions can leave a summary incomplete. Fill or refresh the relevant inputs and inspect the price/rate dates; do not replace a missing value with zero just to make every card display a total.

A repeatable month-end routine

Compare holdings and cash distributions with the broker statement, check pending versus received dividends, then export a dated backup. Annual and YTD views answer different questions; neither turns expected payments into received cash. Data stays in the browser journal, so deleting browser storage can erase it.

Methods and limitations · Report a reproducible error

Understand the numbers with worked examples

Opening balances

Opening balance date (optional)SharesCost per shareActions

Review backup before restoring

A full restore replaces your current journal; export a backup first. Filling missing fields only keeps your current records and existing values.

MarketStocksHolding lotsDividend records

Fill missing fields keeps your current journal and existing values. Replace current records below restores the entire backup instead.