Holding period split for crypto gains
Open a worksheet that has one row per lot sold, with the date acquired, the date disposed, proceeds, and cost basis. The page counts the days each row was held, puts the row in one of two groups, one year or less or more than one year, and totals proceeds, cost basis, and gain or loss for each group. These are the groups often called short-term and long-term. The rule the page applies is stated on it, and the one-year line is worked out two ways that must agree on every row.
The worksheet is read in your browser and stays on this device. Nothing is uploaded.
The file is read in this browser and is not uploaded. The Excel file the capital gains worksheet downloads opens here as it is.
Matched from the header words. Check them and change any that are wrong. Each row needs a date acquired, a date disposed, proceeds, and a cost basis. A row with a blank cost basis is listed as unreadable; it is never read as zero.
Gain or loss by holding period
Totals for each group
Every row, with the days held
"Line date" is the first date disposed that puts the row in the more-than-one-year group: the day after the date acquired, one year later.
The rule this page applies: the count starts the day after the date acquired, and a row is held more than one year when the date disposed is on or after that day one year later. Only dates are used; a time of day in the file is dropped. The page counts and adds. It is not a tax form and it does not say what to report.
What gets checked
- The one-year line is worked out twice for every row: once from calendar dates (the day after the date acquired, one year later) and once from day counts. Both ways must put the row in the same group.
- Every row is in exactly one group: the two row counts add up to the number of rows read from the file.
- Each group's row count, proceeds, and cost basis equal the rows counted and added a second way, in whole cents, and each group's gain or loss is its proceeds minus its cost basis.
- Total proceeds, total cost basis, and total gain or loss equal the two groups added together.
- Gain or loss is proceeds minus cost basis on every row. Where the file lists its own gain or loss for a row, that figure has to equal proceeds minus cost basis.
- Where the file has its own total line, the proceeds, cost basis, and gain or loss on it have to equal the rows that were read.
- Every row was acquired on or before the date it was disposed. A row that was not is listed and the result is marked not verified.
- A warning that lists every row disposed within a day of its one-year line, because one day decides the group and a date can shift by a day with the time zone an export uses.
- Every row with data is accounted for: used, listed as left out (with its row number and the reason), or listed as unreadable. An unreadable row marks the result not verified.
How it works
- Open your worksheet. Drop a worksheet with one row per lot sold (.xlsx or .csv). The Excel file the capital gains worksheet on this site downloads opens as it is. The file is read in the browser.
- Check the column mapping. Date acquired, date disposed, proceeds, and cost basis are matched from the header words and can be changed. Asset, quantity, and a gain or loss column are used when the file has them.
- The page counts and splits. The count starts the day after the date acquired. A row is in the more-than-one-year group when the date disposed is on or after that day one year later; otherwise it is in the one-year-or-less group. Only dates are used, so a time of day in the file is dropped.
- Review and export. The totals for each group, every row with its days held and the date its one-year line falls on, and the verification certificate are shown. Download Excel or CSV, or print.
Worked example
A made-up worksheet with four rows. The second row was acquired on January 5, 2025, so its count starts on January 6, 2025 and the first date that is more than one year is January 6, 2026, the day it was disposed.
| Asset | Date acquired | Date disposed | Days held | Held | Proceeds | Cost basis | Gain or loss |
|---|---|---|---|---|---|---|---|
| BTC | 2025-01-05 | 2025-11-20 | 319 | One year or less | $14,985.00 | $9,009.00 | $5,976.00 |
| BTC | 2025-01-05 | 2026-01-06 | 366 | More than one year | $27,972.00 | $21,021.00 | $6,951.00 |
| BTC | 2025-02-10 | 2026-04-20 | 434 | More than one year | $7,992.00 | $8,008.00 | -$16.00 |
| ETH | 2024-03-10 | 2024-09-30 | 204 | One year or less | $5,000.00 | $4,200.00 | $800.00 |
One year or less: 2 rows, proceeds $19,985.00, cost basis $13,209.00, gain $6,776.00. More than one year: 2 rows, proceeds $35,964.00, cost basis $29,029.00, gain $6,935.00. Together: proceeds $55,949.00, cost basis $42,238.00, gain $13,711.00, which equals $6,776.00 + $6,935.00. The second row is listed in a warning because it was disposed on the first day of its more-than-one-year group: had the date been January 5, 2026, it would be in the other group.
The example uses made-up names and numbers.
Questions
What rule decides the group?
The one stated on the page: the count starts the day after the date acquired, and a row is held more than one year when the date disposed is on or after that day one year later. A lot acquired on January 5, 2025 is in the one-year-or-less group when disposed on or before January 5, 2026 and in the more-than-one-year group from January 6, 2026. The page applies this rule and no other, and it does not say which rule applies to you.
What happens around February 29?
A lot acquired on February 28, 2024 starts its count on February 29, 2024. One year later there is no February 29, so the first date in the more-than-one-year group is March 1, 2025. A lot acquired on February 29, 2024 starts its count on March 1, 2024, and its first more-than-one-year date is also March 1, 2025. Each row shows the date its line falls on.
Does the time of day matter?
No. Only the dates are used, as they are written in the file, with no time zone math. Because an export in another time zone can show a trade one day earlier or later, every row disposed within a day of its line is listed in a warning.
Where does the worksheet come from?
Anywhere that gives one row per lot sold with both dates, proceeds, and cost basis. The capital gains worksheet on this site builds one from an exchange export of buys and sales, and its Excel download opens here without changes. Its CSV download stacks three tables in one file, so the Excel file is the one to open here.
What if a row has no cost basis?
It is listed as unreadable with its row number and the result is marked not verified. A blank cost basis is never read as zero.
Is this a tax form?
No. It is two totals and a list of rows in its own layout. It is not an agency form and it does not say what to report.
This tool calculates and checks numbers. It is not legal, tax, or medical advice.