Transaction Data Rules
Rover Portfolio stores portfolio activity as individual transactions. Those transactions produce positions and can be combined with an imported set of starting positions.
This page is the reference for how imported and entered data is interpreted. For file preparation and examples, start with Importing portfolio data.
Proceeds-based accounting
The facility uses proceeds, not cost, as the signed transaction amount:
text
Proceeds = -(Quantity × Price) - Fees| Activity | Quantity | Proceeds | Cash effect |
|---|---|---|---|
| Buy | Positive | Negative | Consumes cash |
| Sell | Negative | Positive | Generates cash |
| Cash inflow | Zero | Positive | Adds cash |
| Cash outflow | Zero | Negative | Removes cash |
Fees reduce proceeds in every case.
A useful way to remember the signs
Quantity describes the position: buys add units and sells remove units. Proceeds describes cash: money received is positive and money spent is negative.
Trade and cash definitions
Trade
A trade has:
- A symbol
- A non-zero quantity
- Either a positive price or non-zero proceeds
Sells use a negative quantity. For an initial position import, a short position also uses a negative quantity.
In the Positions view, a negative quantity is labeled Short. Its signed Cost is the negative of the opening short-sale proceeds. If a position snapshot does not include that amount, Rover Portfolio reconstructs the proceeds from the sell transactions that make up the open short quantity. Only a position without either source shows the affected calculations as N/A.
Open short-position calculations use:
Signed Cost = -Opening Short-Sale Proceeds
Cost Per Share = Signed Cost / Short Quantity
Unrealized Gain/Loss = Current Value - Signed Cost
Gain Per Share = Unrealized Gain/Loss / Absolute Quantity
Unrealized Gain/Loss % = Unrealized Gain/Loss / Absolute Signed Cost
Cash transaction
A cash transaction has:
- Quantity of
0 - Price of
0 - Non-zero proceeds
A cash transaction with a non-blank Symbol is treated as a dividend. $Cash is reserved for cash transactions.
Symbols
- Symbols may contain no more than 64 characters; a longer symbol causes the transaction to be rejected.
- Symbols are converted to uppercase.
- Spaces are preserved.
$Cashis reserved for cash transactions.
Check leading, trailing, and embedded spaces before import. Because spaces are preserved, BRK B and BRKB remain different values.
Source and identifier
Source and Identifier values may contain up to 64 characters. Longer values are truncated rather than rejected.
These fields are especially useful when imported activity must be traced back to a broker, institution, statement, or external record.
Supported number formats
The parser accepts common US number formats:
text
12345.67
12,345.67
$12345.67
$12,345.67
-123.45
(123.45)Parentheses indicate a negative value. Avoid mixing currency symbols or separators from other locales in the same file.
Supported date formats
Use one of these formats:
text
2026-03-18
03-18-26
03/18/26
03/18/2026When a file has no Date column, the import date is used for every row.
Duplicate handling
Duplicate checking can be enabled or disabled for each import.
A trade is considered a duplicate when all of these values match an existing trade:
- Date
- Symbol
- Quantity
- Price
- Fees
- Source
- Identifier
A cash transaction is considered a duplicate when all of these values match an existing cash transaction:
- Date
- Symbol
- Proceeds
- Source
- Identifier
Enable duplicate checking when re-importing an overlapping statement period. Disable it only when identical activity is intentional and should be recorded more than once.
Transaction IDs
Rover Portfolio assigns ID numbers as records are posted to each data table. These IDs are convenient human references, but they are not accounting inputs.
- IDs increase in posting order, not transaction-date order.
- IDs are not guaranteed to be globally unique.
- IDs have no computational effect.
Use Source and Identifier when you need a stable link to an external system; do not rely on the generated transaction ID as an external unique key.
Matching behavior
Matching is case-insensitive where applicable. Imported column headers also match when they contain an accepted header word: Fees & Commissions, for example, matches the Fees field.
See the complete alias list and sample files in Importing portfolio data.