1Market data ⓘ
Advanced — paste market data offline
No serve.py handy? If you already have the figures, paste daily close prices, GBP/USD averages and
US holidays below. Headers must match exactly.
2Your vests & sales ⓘ column mappings



BenefitHistory.xlsx.


| Action | Date | Qty | Price USD | FX (USD/GBP) | Price GBP | Grant |
|---|
3Calculate CGT
⚠️ Not financial or tax advice — verify figures and consult a professional. How it works & setup →
NAVIGATING THE CORPORATE GRID: UK EQUITY SURVIVAL MANUAL
So, you got paid in virtual corporate scrip (RSUs) rather than cold, hard cash. Congratulations, pioneer. You've earned the right to be dual-siphoned by two separate sovereign tax syndicates, calculated on a paper value you couldn't even sell at. Here is your extraction protocol to climb out of this digital hellscape.
STEP 1 — SCRAPE THE DATA FROM THE MAINFRAME
You need to jack into E*Trade's user-hostile architecture and download two conflicting datasets, because presenting them in a single, coherent format would violate their corporate core values:
- BenefitHistory.xlsx — The Scroll of Eternal Regret. A ledger of every vest event since you sold your soul to the enterprise. Locate it at: At Work → My Account → Benefit History → Download Expanded. DO NOT open this spreadsheet on your local rig unless you want to crash your neural interface; it is a formatting disaster. Our engine will dissect it safely in the background.
- Your orders — The digital receipt of your commercial desperation. Under My Account → Orders, drag the date filter back to your very first day of wage slavery, highlight the entire HTML table, and paste it raw into the input field. Cancelled trades? Let them burn; the engine automatically filters out the garbage.
Market data is pulled directly from Yahoo Finance because E*Trade has a habit of vesting your shares on weekends when the markets are physically offline, while HMRC demands accounting based on daily spot rates. Naturally.
THE FISCAL MEAT GRINDER: UK STOCK TAX
- Income Tax + NI at Vest: The Tax Overlords intercept up to 47% (or 62% if you're stuck in the child benefit trap) of your shares before they even land in your wallet. You are taxed on the theoretical peak value on vesting day under the HMRC Securities Options Manual (ERSM110000), which covers RSUs and LTIPs. If the stock plunges five minutes later, you still owe tax on that high-water mark. Oh, and your employer might legally dump the Employer's National Insurance levy onto you via a Joint NICs Election (see HMRC's guidance on transferring secondary NICs). Delightful.
- CGT When You Liquidate: If you survive the initial vesting tax and the stock somehow goes up, you get hit with Capital Gains Tax. This is calculated using a matching algorithm that feels like it was designed by a sadistic AI.
- The Currency Matrix: Your assets trade in greenbacks (USD), but the tax-drone syndicate requires calculations in Sterling (GBP). Every transaction must be converted to GBP using daily averages. No, you can't use the conversion rate you actually received when you withdrew it. That would make too much sense.
THE ACQUISITION DATE — WHERE WAGE-SLAVES FAINT
Repeat after me: Your acquisition date is NOT the settlement date. Under the sacred text of TCGA 1992 s.119A, your acquisition date and cost basis are welded to the vesting date (rolled to the next active trading day if the market was shut). That vest-day value is what you paid Income Tax on, and it becomes your CGT base cost (see the HMRC HS287 Helpsheet). Do not listen to the slackers in the company chat room telling you it's the date the shares actually arrived in your account (usually 2-3 days later). That's just latency. Basing your CGT on the settlement price is a one-way ticket to an audit.
SECTION 104: A SPECIAL CIRCLE OF SHELL-COMPANY HELL
HMRC matches your sales to your acquisitions in a strict priority queue, designed to neutralize tax-avoidance strategies (see the HMRC HS284 Helpsheet and the technical Share Identification Manual CG51560):
- Same-Day Match: Shares acquired and disposed of on the same calendar day (s.105).
- 30-Day "Bed & Breakfast" Protocol: Disposals matched against acquisitions in the 30 days following the sale (s.106A). Crucially, a new vest counts as an acquisition!
- Section 104 Pool: The digital septic tank. Every other share gets thrown into one averaged-cost sludge pool (s.104). Your shares lose their unique identities and join the collective. Resistance is futile.
The catch: because E*Trade takes days to clear vested shares, you normally can't sell on vest day. Thus, almost all your sales fall into the Section 104 pool. Anyone claiming "I sold the day after, it's a same-day sale" is legally incorrect and begging for trouble.
THE CHRONO-EXPLOIT: THE BUFFER METHOD
The CGT engine doesn't care about the physical shares, only the transaction dates. If you keep a buffer (a pre-existing stack of settled shares) in your account, you can execute a sale on the vest day itself using those settled shares. By date, this creates a true Same-Day match against the new vest, resulting in £0 Capital Gains Tax. The newly vested shares settle a few days later and replenish your buffer. You can roll this exploit indefinitely to bank your vests with no CGT drag. Almost no UK employee knows this is possible because they're too busy staring at the pretty charts.
HARVEST THE SMOLDERING CRATER: THE FOUR-YEAR CLOCK
If the stock collapsed after you were taxed at the peak, you have capital losses. But a loss is just electronic noise until you officially claim it. Under TMA 1970 s.43, you must report these losses to the tax-drones within four years of the end of the tax year in which they occurred, or they dissolve into the ether forever. The Word report generated by this tool will list your remaining time windows. Don't let them expire.
OPTIONS, FEES & OTHER GREMLINS
- Options: Treated as shares once exercised. Cash-exercise-and-hold enters the pool; same-day cashless exercise-and-sell nets to £0 CGT (though you still get hammered on option income tax at exercise under the HMRC Securities Options Manual (ERSM110000)).
- Fees: E*Trade conceals transaction fees in the depths of their statements, so they aren't parsed automatically. Export your disposals CSV, manually add a fee column (convert your £14.99 or $19.99 to USD), and deduct it. Note that wire fees and FX spreads are not tax-deductible; the tax-drones demand their pound of flesh without deduction.
- ISA / SIPP Shelters: Trying to wash US shares directly into a UK tax shelter? You're entirely on your own, pilot.
THE BOTTOM LINE
This tool exists because E*Trade's UI looks like it was designed in the late 90s and HMRC's systems are run on steam-powered abacuses. Built by someone who got tired of spreadsheets and the realization that the system is deliberately complex to extract maximum tribute. Run the calculations, grab your reports, and may the odds be ever in your favor.
⚠️ Not financial or tax advice. Check every figure and consult a professional. Provided “as is”, no warranty of accuracy. Click 💼 Go Corporate for the sober version.
How it works & UK tax guide
This tool computes UK Capital Gains Tax on US equity compensation (RSUs and options) held in E*Trade, from two exports you provide. All processing is local to your machine.
1. Provide your data
- BenefitHistory.xlsx — your award and vesting history. At Work → My Account → Benefit History → Download Expanded. Imported directly; the vesting log is extracted locally.
- Orders — your sales and exercises. My Account → Orders; set the date range back to your earliest order, then select and paste the table. Cancelled orders are ignored.
Daily stock prices, GBP/USD average rates and US market holidays are retrieved automatically when you select “Fetch market data”.
2. UK tax treatment
- Income Tax & NIC at vesting — RSUs are subject to income tax and NICs based on their fair market value on the vesting date (see the HMRC Securities Options Manual ERSM110000).
- Acquisition date & cost basis — both are fixed to the vesting date (rolled to the next trading day if it falls on a non-trading day). The income-taxed value becomes the CGT base cost under TCGA 1992 s.119A (see HMRC Helpsheet HS287). The later settlement/delivery date does not affect this.
- Currency — USD amounts are converted to GBP at the daily exchange rate.
3. Share identification (the matching order)
Each disposal is matched to acquisitions by date, in strict priority (refer to HMRC helpsheet HS284 and CG51560):
- Same day (TCGA 1992 s.105) — acquisitions on the same calendar day.
- Following 30 days (s.106A) — the “bed and breakfast” rule.
- Section 104 pool (s.104) — averaged cost of all remaining shares.
Because shares generally cannot be sold until after the vesting date, most RSU disposals fall to the Section 104 pool rather than same-day matching. The “Matched via” column in the results shows which rule applied to each sale.
4. Same-day sales in practice
A genuine same-day sale requires the disposal to execute on the vesting date itself. As freshly vested shares are not immediately settled, this is generally only achievable by selling shares already held (a standing buffer) on the vesting day, leaving the newly vested shares as the replacement buffer.
5. Capital losses — four-year claim limit
Allowable capital losses must be claimed (notified to HMRC) within four years of the end of the tax year in which they arose (TMA 1970 s.43); otherwise the relief is lost. The generated Word report lists each loss-making year and its claim deadline.
6. Options & fees
Options are treated as shares once exercised: cash-exercise-and-hold enters the pool; same-day exercise-and-sell is CGT-neutral (though subject to Income Tax and NICs at exercise, see the HMRC Securities Options Manual ERSM110000). Transaction fees are not included automatically and can be added from the exported disposals if required.
⚠️ This tool is provided for information only and is not financial or tax advice. Verify all figures and consult a qualified professional before submission.
TALES FROM THE TAX PUNKS
Intercepted communications from the tax resistance. Not financial advice. For entertainment purposes only. Any resemblance to actual tax optimization strategies is purely coincidental…
No tax advisors were harmed in the creation of this chat log. But several spreadsheets did expire from exhaustion.
Insights from the Accountant's Desk
This conversation is for educational purposes only and does not constitute professional tax advice. Please consult with a qualified tax advisor for your specific circumstances.
This professional dialogue aims to clarify common tax considerations for RSUs. Always seek formal advice for your specific situation.
Who are you?
Not an accountant. Just someone who once had a 116% effective marginal tax rate on part of their income.
Jeez. Any advice?
I strongly suggest checking my working.
Why a little Python server?
Look into CORS. Browsers can't call Yahoo Finance directly, so serve.py relays the price lookups
for you — locally, with nothing to install beyond Python 3. Your transactions never touch it.
Why not a proper cloud backend?
Because I want this to run on your own machine, privately, with no accounts and no third-party servers holding your data. The optional Cloudflare worker exists only if you choose to host it online.
Just add more features!
Remember Goodfellas? — sufficient clicks of that Support button and I might think about it!
How can I contact you?
Contact details and the license are here.
The site source is on github.
About Me
I'm not an accountant, but an experienced professional who understands the challenges of navigating complex tax systems — including managing scenarios like effective marginal tax rates exceeding 100%.
Do You Offer Advice?
I strongly encourage you to verify any calculations and seek formal guidance from a qualified accountant.
Why Include a Local Server?
Stock prices and forex rates come from Yahoo Finance, which browsers cannot call directly (CORS). A small, standard-library Python server relays those lookups locally, requiring no installation and keeping your transaction data entirely on your machine.
Why Keep It Local?
The focus is privacy and simplicity. Running locally avoids reliance on external servers. Hosting online is possible via an optional Cloudflare worker, at your discretion.
Can You Add More Features?
With enough community support, further development is possible. Every little helps — especially the Support button!
How can I contact you?
Contact details and the license are here.
The site source is on github.