Open the Annual Report for the first time, and the thing that's notably missing is a form. There's no field where you type cost basis, no place to enter a holding period, no spreadsheet to upload.
That's deliberate: the report is autofilled entirely from the buy and sell transactions you've already recorded in Gold Silver Ledger.
This article is a tour of where each number comes from and how the autofill chain works.
For the walkthrough of the page itself, see Generating your Annual Report.
Tier access
The Annual Report is Premium-only. Autofill works the same whether you've recorded 1 sale or 1,000 — the difference is just access to the page.
The short version
Two pieces of data feed the report, and they're already in your account.
Sell transactions supply the sale date, the price you received per item, and the specific items you sold.
Buy transactions supply each sold item's original purchase date, its purchase price, and any premium or shipping that was part of the cost.
Because every sold item is linked back to the specific buy that created it, the report can match the two sides up exactly — no batch averaging, no "first in first out" guessing, no manual reconciliation.
Where each value comes from
The Sales table has nine columns. Here's the source for each.
Product: The product you selected on the original buy — either a catalog item or one of your custom products.
Metal: Read from that same product record. Every product carries its metal with it.
Buy Date: The transaction date on the buy you recorded.
Sell Date: The transaction date on the sell you recorded.
Days Held: Calculated at report time as the calendar difference between Buy Date and Sell Date.
Term: Derived from Days Held. Under 365 days is short-term; 365 or more is long-term.
Proceeds: The price per unit on the sell transaction, for the specific item in that row.
Cost Basis: The price per unit on the original buy, for the specific item in that row — including any premium and any allocated shipping (more on that below).
Gain / Loss: Proceeds minus Cost Basis. Calculated at report time.
Nothing in that list is stored as a separate "tax record" — every value is either a direct read from a transaction you entered or a calculation done on the fly when the report loads.
Why cost basis doesn't need re-entering
The autofill works because of how the rest of the app is built. Every coin and every bar in your inventory is tracked as its own record. When you record a sale, you don't sell "1 oz of gold" in the abstract — you pick the specific item from your holdings, and that item is permanently tied to the buy transaction that put it there.
So when the Annual Report needs cost basis for a sale, it doesn't have to guess which buy the sold item came from. The link is already there from the moment you saved the sell, and the report just follows it.
This is the Specific Identification cost basis method, and it's the only method Gold Silver Ledger uses.
See How cost basis is determined for the longer write-up.
What cost basis includes
When the report reads cost basis from your original buy, it isn't just the spot price you paid that day — it's the full per-unit price recorded on the buy, which already rolls in:
Premium over spot: Whatever you paid above spot at the time of purchase. The buy form takes premium-per-unit as input, and the resulting per-unit purchase price is what gets locked in. So a 1 oz American Gold Buffalo bought at ~$4,700 spot with a $90 premium has $4,790 in its cost basis line.
Allocated shipping: Any shipping or handling cost you entered on the buy is distributed across the items in that transaction when you save it. Each item carries its share into cost basis from then on.
So your cost basis figure in the Annual Report reflects the true all-in cost of acquiring the item, not the abstract melt value at the time.
What the report leaves out
The Annual Report only shows sales. Items still in your inventory don't appear, because there's no realized gain or loss yet on something you still hold. To see how your held inventory is performing against current spot, head to the Analytics page. See Performance over time.
The report is also scoped strictly to the calendar year you've selected in the Year dropdown. A sale dated Dec 31 belongs to that year; a sale dated Jan 1 belongs to the next year.
If you sold across the year boundary, the two halves will appear under different years in the dropdown — that's the expected behaviour, since each tax year is filed separately.
A note on currency
All monetary values in your account are stored internally in USD, then converted to your chosen display currency when they're shown on screen. The Annual Report respects that the same as every other page in the app.
If you change your display currency between generating a report and exporting it, the figures will refresh into the new currency. That's fine for casual review. If you're preparing a filing in a specific currency, settle the display currency in Settings → Profile before you export.
The report is only as fresh as your records
Because autofill reads straight from your transaction history, the report's accuracy is a direct reflection of what's been recorded. If a buy was entered with the wrong date, the Days Held and Term values on the matching sale will reflect that. If a premium wasn't recorded, the cost basis will be lower than it should be.
The takeaway isn't anything dramatic — just that the report doesn't correct your records; it surfaces them. The work of getting the records right happens during the year, on the Add Purchase and Record Sale forms. By the time tax season arrives, the report has nothing left to ask.
Where to go next
Short-term vs. long-term gains explained: The 1-year holding rule and why the Term column matters.
How cost basis is determined: A deeper look at Specific Identification.
Recording your first transaction: Where the autofill chain starts.
Exporting your Annual Report as PDF: Filing- and archive-ready output.
Exporting your Annual Report as CSV: Column-by-column reference.
