---
title: 'Portfolio Management'
description: 'Track your stock, ETF, and mutual fund holdings with real-time price updates'
---
## Overview
The Portfolio Management feature allows you to track your current stock, ETF, and mutual fund holdings with real-time price updates from Finnhub.io. View comprehensive metrics, allocation charts, and performance analysis all in one place.
## Key Features
Automatic price updates from Finnhub API
Track stocks, ETFs, and mutual funds
Interactive allocation and performance charts
Bulk import holdings from CSV files
## Using the Portfolio
### Adding Holdings
Navigate to the Portfolio page and click the "Add Holding" button
- **Symbol**: Stock ticker (e.g., AAPL, MSFT)
- **Type**: Select stock, ETF, or mutual_fund
- **Shares**: Number of shares owned
- **Average Cost**: Your average cost per share
- **Notes**: Optional notes about the holding
Click "Save" to add the holding to your portfolio
### CSV Upload
Upload a CSV file with the following format:
```csv
symbol,type,shares,average_cost,notes
AAPL,stock,100,150.50,Tech holding
VOO,etf,50,400.00,S&P 500 ETF
VTSAX,mutual_fund,500,120.25,Index fund
```
See the [CSV Upload guide](/features/csv-upload) for detailed formatting instructions.
## Portfolio Metrics
The dashboard displays four key summary cards:
| Metric | Description |
|--------|-------------|
| **Total Value** | Current market value of all holdings |
| **Total Cost** | Total amount invested (shares × average cost) |
| **Total Gain/Loss** | Dollar amount gained or lost |
| **Total Return** | Percentage return on investment |
## Charts
### Allocation Chart
Interactive doughnut chart showing:
- Percentage of portfolio in each holding
- Dollar amounts on hover
- Click legend to show/hide holdings
### Performance Chart
Bar chart displaying:
- Gain/loss for each holding
- Green bars for profitable holdings
- Red bars for losing holdings
## Managing Holdings
### Edit a Holding
1. Click the edit (✏️) button next to any holding
2. Update the fields you want to change
3. Click "Save"
You cannot change the symbol of an existing holding. To change a symbol, delete the holding and add a new one.
### Delete a Holding
1. Click the delete (🗑️) button next to any holding
2. Confirm the deletion
## Price Updates
Click the **"Refresh Prices"** button to fetch the latest market prices for all holdings. Prices are also automatically refreshed when viewing the page if the last update was more than 15 minutes ago.
### Rate Limiting
The free Finnhub API tier allows:
- **60 requests per minute**
- **Real-time US stock quotes**
- **Delayed mutual fund prices** (typically 15-30 minutes)
The application intelligently manages API requests to stay within these limits.
## Technical Details
### Price Update Logic
When refreshing prices, the application:
1. Checks the last update timestamp
2. If > 15 minutes old, fetches new prices
3. Makes API calls in batches to respect rate limits
4. Updates the database with new prices and timestamp
5. Recalculates portfolio metrics
### Data Storage
Holdings are stored in the `holdings` table with the following schema:
```sql
CREATE TABLE holdings (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id),
symbol VARCHAR(10) NOT NULL,
type VARCHAR(20) NOT NULL,
shares DECIMAL(10,4) NOT NULL,
average_cost DECIMAL(10,2) NOT NULL,
current_price DECIMAL(10,2),
last_updated TIMESTAMP,
notes TEXT
);
```
## Next Steps
Analyze your historical trading performance
Integrate with the Portfolio API