# Sample data

> Load a clearly labeled sample portfolio built on real historical prices to explore every screen, then remove it in one click.

Source: https://investi.live/docs/getting-started/sample-data

The sample portfolio fills every screen with realistic data so you can see what Investi does before you import anything. It sits on real historical prices, but it is not your history, and Investi labels it that way everywhere.

## Loading it

You can load the sample from two places:

- **Home.** With no data yet, Home shows an onboarding panel. Under "Just exploring?", click **Load sample account**.
- **Settings.** In the **Import Schwab history** panel (`/settings#data`), click **Load sample account** under "Sample data".

Loading fetches two years of daily prices for each ticker, so it is not instant. If prices cannot be fetched, Home shows "Could not load sample data. Price history may be unavailable right now."

## What it contains

Everything goes into one account named **Sample account (not real)**, with the masked number `SAMPLE`. Every record in it has source `sample`.

| Ticker | Closed round trips | Shares per trip | Sessions held | Open position |
| --- | --- | --- | --- | --- |
| SPXC | 6 | 20 | 9 | 15 shares |
| AAPL | 3 | 10 | 20 | 12 shares |
| MSFT | 2 | 8 | 30 | 6 shares |
| JPM | 3 | 15 | 14 | none |
| COST | 1 | 3 | 40 | 3 shares |
| NKE | 2 | 25 | 12 | 40 shares |

How the records are built:

- **Fills** use real daily bars from the last 300 sessions. Each round-trip fill is priced at the midpoint of that day's high and low, each sell comes the listed number of sessions after its buy, and the trips are spread evenly across the window. The open positions are bought at the day's low 12 sessions before the latest bar. Fees are zero.
- **Working orders.** Each open position also has one GTC limit buy for about half its shares (rounded, at least one), priced at 95% of the latest close and expiring 60 days after you load the sample. This exercises the order exposure views.
- **Cash.** A $50,000 deposit dated 400 days ago, and a balance snapshot with a $4,200 margin debit.

A ticker is skipped if it cannot be resolved or has fewer than 300 daily bars of history. Fills and orders carry fixed fingerprints, so loading the sample twice does not duplicate them.

Because sample fills run through the same ledger as real ones, round trips, realized P/L, win rate and the research pages all work exactly as they would for your own record. See [The ledger](/docs/concepts/ledger).

## The banner

While a sample account exists, every app page shows a banner under the header:

> **Note:** Sample data. A labeled sample account is loaded so you can explore. It is not your trading history.

The banner's **Remove sample** link goes to `/settings#data`. Coverage and provenance also say so: the History page's Imports panel notes "Current records are sample data." when no file imports exist, and portfolio responses through the MCP connector carry `sample: true` in their provenance.

## Removing it

Click **Remove sample account** in Settings. Investi deletes every account with source `sample` in your workspace. Fills, orders, cash events, balances and snapshots in those accounts go with it. Your own imported or synced accounts are untouched, and the banner disappears on the next page load.

Sample data and your real history can coexist, but totals across all accounts then include both. Remove the sample before you rely on combined figures.

## From the API

| Request | Effect |
| --- | --- |
| `POST /api/v1/sample` | Loads the sample. Returns the account id and the number of fills written. |
| `DELETE /api/v1/sample` | Removes every sample account. Returns `{ "ok": true }`. |

Both require the signed-in app session and the `workspace:write` scope. Requests made with a personal access token or an OAuth token are refused with `403 session_required` ("Use the app"), so an integration cannot add or remove sample data on your behalf.
