Managing Investment Accounts
Investment accounts in Sure go beyond simple balance tracking. They help you understand your portfolio through holdings, trades, cost basis tracking, and investment activity labels.Understanding Holdings
A holding represents your position in a specific security. For example, if you own 50 shares of Apple stock, that’s one holding. Each holding tracks:- Security - What you own (stock, ETF, mutual fund, crypto)
- Quantity - How many shares or units you hold
- Price - Current market price per share
- Amount - Total current value (quantity x price)
- Cost Basis - What you originally paid
Cross-account holdings roll-up
The Investments panel on the dashboard and in reports aggregates your holdings by security across all investment accounts. If you hold the same security in multiple accounts — for example, Apple shares split between a brokerage and an IRA — Sure sums those positions into a single row rather than listing each account separately. Portfolio weight shown in the top holdings table and in the allocation view is calculated as a percentage of your total portfolio value (including cash). Both views share the same denominator, so the same security always shows the same weight in both places.Provider-synced holdings
When a provider (such as SimpleFIN, SnapTrade, or CoinStats) imports your holdings, it delivers a snapshot of your positions on a specific day. Sure tracks which day each snapshot came from and only shows holdings from the most recent provider import day in investment views. Holdings from earlier snapshots are excluded so that stale positions do not appear alongside your current portfolio. If a provider reports prices for individual securities on different dates within the same import batch, Sure preserves those per-security price dates while still treating the entire batch as a single import day. This means your portfolio view reflects the most up-to-date information from each sync, without mixing in older snapshots. For accounts that have no provider connection, Sure shows the most recent holding per security in the account’s currency from your manually entered or calculated data. Holdings recorded in a different currency than the account’s base currency are excluded from the current portfolio view.How locks carry forward across syncs
When a provider creates a new daily snapshot row for a holding you have previously locked — either a security remap lock or a cost basis lock — Sure copies those locks onto the new row automatically. This applies to all providers, including those that do not supply a per-holding unique identifier (such as Plaid, Indexa Capital, and SnapTrade securities). Without this carry-forward, a new sync would silently drop your manual corrections and replace them with the provider’s values.Chart history and inception dates
For linked investment and crypto accounts, the balance chart only displays data from the point where Sure has reliable provider history. The chart start date is determined by the earliest date your provider supplied activity or holdings data — data from before that point is excluded so the chart never shows misleading zero or estimated values. Opening point alignment When the chart includes the inception date (the first supported history date), Sure aligns the opening point so the chart starts at the balance before the first activity rather than after it. Without this, a first deposit of 0 in gains instead of reflecting actual growth. There are two cases:- Periodic sampling landed on the inception date (for example, a daily “All” chart): the first point’s closing balance already includes the day’s activity. Sure resets that point to the pre-activity balance — zero, or the opening anchor balance when that anchor is dated at inception. This only applies when the inception date comes from the first provider activity date; if it comes from provider holdings data (for example, when only pending transactions exist), the first point is genuine history and is left as-is.
- Periodic sampling missed the inception date (for example, a monthly chart that skips the exact opening day): Sure prepends an anchor point on the inception date with the correct opening balance before the first sampled point.
Recording Trades
Investment accounts support manual trade entry to track your buy and sell activity.Trade Types
When recording a trade, you can specify:- Buy: Purchase of securities
- Sell: Sale of securities
- Dividend: Dividend income (recorded as a trade with qty: 0 and price: 0)
- Interest: Interest income (recorded as a trade with qty: 0 and price: 0)
Recording Dividends and Interest
Dividends and interest are recorded as trades to maintain data integrity: Dividends:- Require a security selection (the security that paid the dividend)
- Recorded with qty: 0 and price: 0
- Amount represents the dividend payment received
- Security selection is optional
- If no security is selected, Sure creates a synthetic cash security for the account
- Recorded with qty: 0 and price: 0
- Amount represents the interest earned
[!NOTE] Some providers — including Trading 212, Interactive Brokers, Questrade, SnapTrade, Indexa Capital, and Kraken (fiat staking and earn) — deliver dividend and interest income as labeled transactions rather than as qty:0 trades. Sure counts both forms when calculating the dividend and interest totals shown on your investment summary.
Transaction Fees
Trades support an optional fee field to track transaction costs:- Fees are included in the total amount calculation:
qty × price + fee - Fees default to 0 if not specified
- Useful for tracking brokerage commissions, exchange fees, or other trading costs
- Buy 10 shares at 5 fee = $1,005 total cost
- Sell 10 shares at 5 fee = $1,095 proceeds (fee deducted before the gain is measured)
- Open the trade form (create or edit)
- Enter the fee amount in the fee field
- The total amount updates automatically to include the fee
- A purchase fee raises the cost of the lot, reducing unrealized gain while you hold the position.
- A disposal fee is deducted from the sale proceeds before the realized gain is measured.
Securities types
Sure supports various security types:Asset classification
Each security can be classified by asset class, sub-class, sector, industry, and region. This classification data will power allocation breakdowns — letting you see how your portfolio is distributed across equities, fixed income, real estate, and other categories. Asset classes
Asset sub-classes
bond, cash, collectible, commodity, cryptocurrency, etf, loan, mutual_fund, precious_metal, private_equity, real_estate, stock
Sector and industry hold the vocabulary your data provider supplies. Because different providers use different taxonomies, these fields accept any string rather than a fixed list.
Region is derived from the security’s country code against a list Sure owns, so it uses a closed vocabulary. No provider writes this field directly.
Classification source records who set the classification:
Classification locked is a boolean flag. When
true, no automated source — provider, AI, or default — can overwrite the classification. Sure sets this automatically when you change a security’s classification manually.
Stock splits
A stock split changes a security’s share count without a trade. A 2-for-1 split turns 10 shares into 20; a 1-for-10 reverse split turns 100 into 10. The money invested does not change, so the cost per share moves by the inverse of the ratio.How splits are applied
Sure applies a split at the open of its ex-date, before that day’s trades. If you hold a security on the ex-date, your share count is scaled up (or down for a reverse split) and the per-share cost is adjusted by the inverse ratio so that your total cost basis does not change. Splits are applied from your account’s start date through today. A split with a future ex-date takes effect when that date arrives — it is not applied early.Splits on provider-synced accounts
When a provider snapshot is older than the ex-date, Sure carries the snapshot forward through any splits that occurred between the snapshot date and today before applying it to your portfolio. This ensures your current holdings reflect the correct post-split share count even when a sync is delayed or the provider’s data is stale.Precision
Quantities after a split are rounded to 18 decimal places, matching the precision of the stored share count column. A scale-then-unscale round trip can land one unit in the last decimal place away from the original — this is the floor the storage format imposes and affects only negligibly small fractions of a share.Cost Basis Tracking
Cost basis is the original purchase price of your investments. It’s essential for:- Calculating gains and losses
- Understanding investment performance
- Tax reporting
Cost Basis Sources
Sure tracks cost basis from three sources, in order of priority:
This hierarchy ensures your manual entries always take precedence, calculated values override provider data, and provider data is used when nothing else is available.
How calculated cost basis works
Sure uses the weighted-average cost method to compute your cost basis from trades:- Buys update the running average: the new share cost is folded into the existing position at the average weighted by quantity. Any acquisition fee is included in the per-share cost — a 0.50 to the cost of each newly acquired share before that lot is combined with any existing position.
- Sells relieve the position at the current average cost, leaving the per-share average unchanged for the shares that remain. A disposal fee does not affect the basis of the remaining shares.
- Full liquidation resets the tracker completely. If you sell your entire position and buy again later, the new lot starts from a clean basis — the old (realized) lots do not carry over and corrupt the new position’s cost basis.
- Outbound transfers (shares moved to another account you own) are treated the same as sells: they relieve the running average so the transferred shares no longer affect the basis of any shares remaining in the account.
avg_cost on a holding — shown in the holdings list, the holding drawer, and the API — reflects only the cost of the shares you currently hold, not an average across every purchase the account ever made for that security.
Transfers and cost basis
When securities are transferred into an account, Sure cannot determine what those units originally cost. Because the purchase happened elsewhere — at a price nothing in this account recorded — any calculated cost basis for that position would be fabricated rather than real. Sure marks the position’s cost basis as unknown so you are not shown a misleading figure. When securities are transferred out of an account, Sure does not touch the cost basis of the shares that remain. Those remaining shares came from real purchases this account recorded, and their cost basis is correct. You can set it manually if you need to record it explicitly. Once you sell all of the transferred shares and the position reaches zero, Sure releases the unknown mark. Any shares you buy after that point are treated as a fresh purchase with a known cost basis, so gains and losses calculate correctly from that repurchase forward.[!NOTE] Only a calculated cost basis is cleared on an inbound transfer. If you have set a manual cost basis, or your institution provided one, Sure keeps that value — it represents an explicit assertion about what the position cost, which the app respects.
Setting Cost Basis Manually
You can set cost basis in two ways: From the Holdings List:- Navigate to your investment account
- Find the holding in your portfolio
- Click the pencil icon next to the average cost
- Enter either:
- Total cost basis: The total amount you paid for all shares
- Per-share cost: The average price per share
- Click Save
- Click on a holding to open its detail drawer
- In the Overview section, click the pencil icon next to “Average Cost”
- Enter the cost basis (total or per-share)
- Click Save
[!TIP] The cost basis editor provides real-time conversion between total and per-share values. Enter whichever format you have available, and Sure calculates the other automatically.
Lock Protection
When you manually set a cost basis, Sure automatically locks it to prevent automatic updates from overwriting your value. You’ll see a lock icon indicating the value is protected. This ensures your manual entries remain intact during account syncs. When a provider sync creates a new daily holding row, Sure carries the lock forward onto that row, including for providers that do not supply a per-holding unique identifier (Plaid, Indexa Capital, and SnapTrade securities).Unlocking Cost Basis
If you want Sure to recalculate cost basis from your trades:- Open the holding drawer
- Scroll to the Settings section
- Find “Cost basis locked”
- Click Unlock
- The lock icon disappears
- Future syncs can update the cost basis
- Calculated values (from trades) will replace the manual value
Recording Trades
Investment accounts support recording various types of trades to track your portfolio activity.Trade Types
Deposits and withdrawals
A deposit or withdrawal moves cash between your investment account and a second account (the transfer account). Because the trade books an entry on both sides, Sure requires write access on the transfer account — the same requirement that applies when creating a transfer directly. The transfer account picker only shows accounts you can write to. If an account is shared with you as view-only, it does not appear in the list. When using the API, passing atransfer_account_id that belongs to a read-only or inaccessible account returns a 404 Not Found response.
Recording Dividends and Interest
Dividends and interest are recorded as trades with zero quantity and zero price, allowing them to be associated with specific securities while maintaining data integrity. Dividends:- Require a security selection (the stock/fund paying the dividend)
- Recorded as a trade with qty: 0 and price: 0
- Amount represents the dividend payment received
- Security selection is optional
- When no security is selected, Sure creates a synthetic cash security for the account
- Recorded as a trade with qty: 0 and price: 0
- Amount represents the interest earned
- Navigate to your investment account
- Click + New Trade
- Select Dividend or Interest from the type dropdown
- For dividends: Select the security that paid the dividend
- For interest: Optionally select a security, or leave blank for cash interest
- Enter the amount received
- Set the date
- Click Save
[!NOTE] Dividends require a security selection, while interest can be recorded without one. When no security is selected for interest, Sure automatically creates a per-account synthetic cash security (kind:Some providers — including Trading 212, Interactive Brokers, Questrade, SnapTrade, Indexa Capital, and Kraken (fiat staking and earn) — import dividend and interest income as labeled transactions rather than as qty:0 trades. Sure counts both forms when calculating the totals shown on your investment summary. Income-labeled outflows such as margin-interest charges or dividend reversals reduce the total rather than adding to it.cash, offline:true) to maintain data integrity.
Trade Fees
All trades support an optional fee field to track transaction costs:- Fees are included in the total amount calculation:
total = (qty × price) + fee - Fees default to 0 if not specified
- A purchase fee is added to the lot cost, so it reduces your unrealized gain while you hold the position
- A disposal fee is deducted from the sale proceeds before the realized gain is measured
Investment Activity Labels
Activity labels help you classify investment transactions. They appear as badges in your transaction list and help you understand your investment activity at a glance. The quick-edit activity badge, its label picker, and the transaction detail select use the translated activity label, falling back to the stored label when no translation exists. The trade detail header uses its own translations: when it has wording for the recorded activity, it displays that translated name. When the label is absent or has no header wording, it falls back to “Buy” for a positive entry amount and “Sell” otherwise.Recording Dividends and Interest
Dividends and interest are recorded as trades with zero quantity and zero price. This approach maintains data integrity while properly tracking investment income:- Dividends require a security to be selected (the stock or fund paying the dividend)
- Interest can optionally specify a security, or will use a synthetic cash security for the account
- Both appear in your holdings and trade history
- Both are properly labeled with their respective activity types
- The zero-quantity, zero-price approach preserves the trade model’s required security association
- Select Dividend or Interest from the trade type dropdown
- For dividends: Choose the security paying the dividend (required)
- For interest: Optionally select a security, or leave blank to use the account’s cash position
- Enter the amount received
- The trade is created with qty: 0 and price: 0, maintaining the security association
Trade Fees
All trades support an optional fee field to track transaction costs like brokerage commissions, exchange fees, or other trading expenses.How fees work
- Fees are included in the total transaction amount:
Total = (Quantity × Price) + Fee - Fees default to 0 if not specified
- A purchase fee is added to the lot cost. This raises your cost basis per share, so unrealized gain is lower while you hold the position.
- A disposal fee is deducted from the sale proceeds before the realized gain is calculated.
Adding fees to trades
When creating or editing a trade:- Enter the quantity and price as usual
- Add the fee amount in the Fee field
- The total amount updates automatically to include the fee
- Save the trade
- Quantity: 10
- Price: $50
- Fee: $5
- **Total cost: 50 + 50.50 per share
- Cost basis and unrealized gain (purchase fees)
- Realized gain and the investment sales report (disposal fees)
- Tax reporting and record keeping
Available Activity Labels
[!NOTE] Dividends and interest are recorded as trades with zero quantity and zero price. Dividends require a security selection, while interest can optionally use a synthetic cash security if no specific security is selected.
Setting Labels Manually
- Open a transaction from an investment or crypto account
- Scroll to the Settings section
- Find “Activity type”
- Select a label from the dropdown
- The change saves automatically
Setting Labels with Rules
Create rules to automatically label transactions based on patterns:- Go to Settings > Rules
- Create a new rule
- Set conditions (e.g., “IF transaction name contains ‘DIVIDEND’”)
- Add action: “Set investment activity label”
- Choose the label (e.g., “Dividend”)
- Save the rule
- IF name contains “DIVIDEND” THEN set label to “Dividend”
- IF name contains “INTEREST” THEN set label to “Interest”
- IF name contains “FEE” THEN set label to “Fee”
[!NOTE] Transfer, Sweep In, and Sweep Out are excluded from budget calculations and from the investment sales report, since they represent assets moving between accounts you own rather than actual sales. Exchange is excluded from budget calculations, but security exchanges remain in the investment sales report because they can represent a taxable disposition.
Tax Treatment Categories
Investment accounts have different tax implications based on their type:
Sure automatically assigns tax treatment based on account subtype, but you can adjust it manually if needed.
How investment cash flows are classified
Eligible trades and transactions in investment or crypto accounts are assigned one of five flow classes. Sure uses these classes to compute portfolio returns, allocation breakdowns, and income figures consistently.
Classification considers the entry type, activity label, transaction kind, attached transfer fees, and whether a transfer counterpart falls inside the scope being measured. A transfer between two of your brokerage accounts is internal when you are looking at your whole portfolio, but external (an outflow from one account and an inflow to the other) when you are looking at either account on its own.
Activity labels map to flow classes as follows:
Excluded entries, pending transactions, and valuation entries do not count in any class. Contribution and Withdrawal labels on trades use quantity direction; the linked-counterpart exception in the table applies to cash transactions. Attached transfer-fee transactions are classified as fees before their activity label is considered.
Setting the correct activity label on an entry is the primary way you control how it affects your portfolio return figures. An unlabeled deposit transaction with no in-scope transfer counterpart is classified as an external inflow and excluded from the investment return; a dividend labelled as a contribution would be counted as a cash flow in rather than as income. Use the activity label selector in the entry detail view to correct misclassified entries.
Portfolio returns: time-weighted vs. money-weighted
Sure tracks two different return figures for your investments, because no single number answers every question about performance. Time-weighted return (TWR) measures what the investments themselves did. It strips out the effect of your cash flow timing — when you added money or withdrew it — so you can compare your portfolio against a benchmark on equal terms. Money-weighted return (MWR) measures what you, the investor, got. It is the internal rate of return (IRR) of your actual cash flows: money you put in is negative, money you took out or the terminal value of the portfolio is positive. Two investors holding the same fund over the same year, one of whom bought most of their position the week before a large fall, did not have the same year — MWR captures that difference.How Sure calculates the money-weighted return
Sure solves for the rate that makes the present value of your cash flows equal to zero. The solver uses Newton-Raphson with a bisection fallback:- Newton converges in a handful of iterations for most portfolios.
- Every loss and other ill-conditioned series is handed off to bisection, which is slower but cannot diverge.
- The result is expressed as an annualised rate unless the period is short enough that annualising would produce an unreliable extrapolation, in which case the period rate is used instead.
BigDecimal rounded to the same precision Sure uses for all monetary figures.
When a money-weighted return is not available
Three situations produce no rate rather than an approximate one:
In each case Sure shows nothing rather than a fallback guess.
Series with more than one valid rate
A cash flow series that changes sign more than once can have two rates that both satisfy the equation — for example, a portfolio with a withdrawal between two deposits. Sure returns the rate the solver reaches from its starting point (10%), which matches the behaviour of Excel’s XIRR function. Theambiguous? flag on the calculation is a conservative signal: false guarantees the figure is the only rate that fits; true means it may be one of several. Over-hedging a unique figure is a smaller error than presenting one of several as definitive.
[!NOTE] The money-weighted return display in the UI is coming in a follow-up release. The calculation engine described here is already in place.
Understanding Gains and Losses
Sure helps you track two types of gains:Unrealized Gains/Losses
Paper gains or losses on holdings you still own:Realized Gains/Losses
Actual gains or losses from securities you’ve sold. These are what matter for taxes. Fees are included in the calculation on both sides: the purchase fee is part of your cost basis, and the sale fee is subtracted from your proceeds. For example, if you bought 10 shares at 5 purchase fee and sold them at 3 sale fee, your realized gain is(10 × $110 − $3) − (10 × $100 + $5) = $1,097 − $1,005 = $92.
The Trend indicator on each holding shows your unrealized gain or loss, calculated from your cost basis. If cost basis is unknown (no trades and no manual entry), the trend won’t display.
Trades labeled Transfer, Sweep In, or Sweep Out are not counted as sales in the investment report. These labels mean the asset moved to another account you own, so no gain or loss is realized. The investment report excludes them and realized_gain_loss returns nothing for them.
Trades labeled Exchange are included in the report. For cash this label means a currency exchange, which is internal. For a security it covers a security-for-security exchange, which can dispose of an appreciated asset. Because the two cases are not distinguishable by label alone, and because a missing realized gain is harder to spot than an extra line, exchange trades on securities remain visible so you can review them.
Multi-currency gains and cost basis
When a security is priced in a different currency from the one your account uses, Sure converts amounts into the account currency before calculating gains. There is no fallback to a nearby date and no default rate of 1.0 — if the rate for a given day is missing, Sure treats the figure as unknown rather than showing an incorrect one. Realized gains: Sure converts sale proceeds at the exchange rate for the disposal date. If that rate is missing, no realized gain figure is shown for that trade. Cost basis and unrealized gains: If a purchase was made in a foreign currency and neither a usable trade-level rate nor a rate for that purchase date is available, Sure marks the cost basis as unknown. The calculated basis remains unknown until the needed conversion is available and the holding is recalculated, or a usable provider or manual cost basis supplies it. Exchange rates that are zero or negative are treated the same as missing. A bad rate in the database does not silently produce a wrong figure. If a gain or cost basis figure is absent for a foreign-currency position, check that an exchange rate exists for the security’s currency against your account’s currency on the relevant date. You can add missing rates at Settings → Exchange rates. Some data providers (such as IBKR via Flex reports) supply a trade-level exchange rate alongside each transaction. When this rate is present, Sure uses it for cost basis calculations and falls back to the exchange-rate table only if no trade-level rate was provided.Automatic exchange rate import for foreign-currency securities
When an account holds securities priced in a currency other than the account currency — for example, a USD-priced crypto asset in a EUR account — Sure automatically imports exchange rates for those price currencies during each sync. Rates are fetched starting from the first date the account needs a price for each security, based on your own trades and holdings rather than the security’s global price history. Security prices are imported before exchange rates so the relevant currencies are known at the start of each sync. Only price currencies that have a price on or after the first required date are included, so currencies from older listings used by other accounts do not trigger unnecessary rate imports. This means the portfolio cache can always convert each security price into your account currency without falling back to live per-day provider requests. Syncs that previously repeated hundreds of exchange rate lookups because rates were missing from the database complete in normal time after upgrading.Crypto-Specific Features
Crypto accounts work similarly to investment accounts but have unique characteristics:- Exchange accounts support manual trade entry, letting you record buys and sells
- Wallet accounts are sync-only, holdings are updated through provider connections
Converting a transaction to a trade (crypto exchange accounts)
When a provider syncs your crypto exchange account as plain transactions rather than trades, you can convert an eligible, non-excluded transaction into a trade directly from the activity feed. To convert a transaction:- Open your crypto exchange account and go to the Activity tab.
- Click the activity label badge on the transaction you want to convert.
- Select Buy or Sell from the label picker. Sure opens a conversion form pre-populated with the transaction’s amount and date.
- Enter either a quantity or a price per unit — Sure calculates the missing value from the transaction amount automatically.
- Select the security (cryptocurrency) from the list, or choose Enter custom ticker to type one in.
- Confirm the details and submit the form.
This conversion is not available for wallet-type crypto accounts. Only exchange accounts (
subtype: "exchange") support trades and transaction conversion.Adding Investment Accounts
- Click + Add Account on your dashboard
- Select Investment or Crypto
- Choose the appropriate subtype (see Account Types for all options)
- Enter your account details:
- Account name
- Current balance
- Tax treatment (if different from default)
- Click Create Account