One net row, two legs
A roll often arrives as a single entry with no per-leg cash. Split it naively and you will confidently assign profit to the wrong contract.
A ledger, not a dashboard
Your broker can tell you what you own. It is much worse at telling you what you earned, and options make it worse still. OptionEdge reconstructs every realized dollar, per contract and per ticker, and proves it against your broker's own cash.
Every account total carries this line. Where a broker genuinely did not report enough to attribute a dollar, such as a roll that arrives as one net row, the gap is named and the tickers leaning on it are flagged. The total always matches your broker. The app tells you how much of the story behind it is inference.
The missing greeks are a choice, not a gap. They need a live options chain, which means a third party that can rate-limit you, go dark, or restrict what you may pass on. Everything here comes from settled broker records instead: facts that stay true offline and cost nobody a licence.
A roll often arrives as a single entry with no per-leg cash. Split it naively and you will confidently assign profit to the wrong contract.
Assignment and call-away hand over stock without any trade being reported. Positions appear and vanish, and cost basis walks off with them.
A contract that expires generates no event at all. It simply stops being listed, which is indistinguishable from having been closed unless you check.
The positions feed can run an hour behind the order feed, so something you closed at lunch is still shown as open, and still counted.
Handled naively, each of these produces a confident wrong number rather than an error. That failure mode is what the whole design is arranged against.
| Account | Currency | Open | Options | Stock | Combined |
|---|---|---|---|---|---|
| PERSONAL | mixed | 12 opt · 2 eq | 9,204.90usd | 3,275.25usd | - |
| TFSA | USD | 3 opt · 1 eq | 1,140.00 | −94.10 | 1,045.90 |
| RRSP | CAD | 0 opt · 6 eq | 0.00 | −318.40 | −318.40 |
Illustration with sample figures, not a real account. Note the first row: it holds American options and Canadian stock, so each ledger counts toward the total for its own currency and the account itself gets no combined figure. There is no currency such a figure would be in.
Attributed plus unattributable equals broker cash, on every account total. You are never asked to take a figure on faith.
Shares whose cost predates your broker's history are booked at zero and labelled, not counted as pure profit. One such case would have overstated a position by six figures.
Every monetary column is a scaled integer in a STRICT table, so a float
cannot be stored even by mistake. No .699999999997.
Totals across all connected accounts and per account, split by currency, because a TFSA and an RRSP are not the same money and neither are dollars and dollars.
No server of ours, no account, no telemetry. Requests are signed on your device with your own key and answered directly by your broker.
The accounting was reconciled against a real account, then compared event by event against the implementation that did it: 1,272 events each side, one contract differing by three cents of rounding.
Every credential is one you obtain yourself, from the provider, and it never leaves your machine. That is not a way to save on hosting. It is the only arrangement in which “nobody else can see your positions” is checkable rather than promised.
Today the only service it talks to is SnapTrade, which is what connects to your broker; their free personal tier covers up to five connected accounts. Nothing else is wired in, and this page will not claim otherwise until it is.
The accounting engines are finished and tested; the polish is not. There is nothing to install and nothing to sign, because there is no binary: you run the source, which is also the only way to be certain what you are running.
Sign up with SnapTrade directly and take a client id and consumer key from their free personal tier. You are their customer, not ours.
You need Node 22.18 or newer. Nothing else.
git clone https://github.com/thecookieorg/option-edge-next.git
cd option-edge-next
npm install
npm run build
npm start # http://127.0.0.1:3000
The keys go straight into your keychain. Connecting opens your broker's own page in a new tab, with an address bar you can check. No broker password is typed into this app or stored by it.
The first pull takes a minute or two; after that it is incremental. Everything lands in one SQLite file: back it up by copying it, uninstall by deleting it.
Want to check it before you trust it? npm run verify runs the typechecker and
all 323 tests. They run straight off the TypeScript with no build step and no test
framework, so there is nothing between what you read and what runs.
A tool that reads your brokerage history should be able to state its downsides as clearly as its features. Here they are.
127.0.0.1 only, so
nothing outside your machine can reach it, but any process running as you can. A
desktop build would not have that property. This is the honest trade for not having to
sign, notarize and ship binaries for three operating systems.
You may use, modify and distribute this, including commercially, provided you keep the notices and state your changes.
Apache-2.0 rather than MIT for one reason: it grants you a patent licence from every contributor. For anything touching financial calculation, that is worth having in writing.
This is a reporting tool. It recommends nothing, and it places no trades. Its figures depend entirely on what your broker reports.
Check it against your broker before relying on any figure. Do not file taxes from it. Provided “as is”, without warranty of any kind.