Every tax season, the same ritual: download the Robinhood activity CSV, stare at hundreds of rows of buys and sells, and try to reconstruct which sale came from which purchase — and whether each gain is long-term or short-term.
Robinhood gives you a ledger, not an answer. The CSV lists every transaction in chronological order, but your holding period lives across rows: a single sell might close out three different purchases, some held for years, some for weeks. The 1099-B eventually arrives and does the math for you, but by then it’s February, the numbers are a fait accompli, and you’ve learned nothing about your own trading.
I wanted three things the 1099 doesn’t give me:
- The answer early. Know your realized gains during the year, while there’s still time to act — harvest a loss, defer a sale past the one-year mark, or just set cash aside for the tax bill.
- The reasoning, not just the number. For each sell, show exactly which buy lots it consumed under FIFO, with dates and holding days. If the tool says “short-term,” I want to see why.
- Privacy by construction. A brokerage export is about as sensitive as a file gets. I didn’t want to upload mine to anyone’s server — including, frankly, my own. So the tool runs entirely in the browser: parse, match, and estimate without a single network request.
The result is the Robinhood holding-period analyzer. Import your activity CSV and it groups everything by symbol, FIFO-matches sells to buys, and flags the tricky cases instead of guessing: sells with no covering purchase in the file, symbols with a stock split in their history, option trades and cash movements it deliberately ignores. A tax-scenario panel then applies your short-term rate and the IRS long-term brackets (0/15/20%) for a rough estimate.
A few honest caveats, since this touches taxes: it’s FIFO only, it doesn’t handle wash sales, and option strategies are out of scope. It’s a learning and planning aid, not tax advice — your 1099-B and your accountant have the final word.
Building it scratched the same itch as this blog: learn in public. The matching logic is covered by unit tests checked in alongside the widget code — dividend reinvestments, fractional shares, multi-year histories — and the whole thing is one more reason I keep this site fast and dependency-light.
If you try it with your own export, I’d love to hear what it gets wrong. Every misclassified row is a feature request.