I stopped paying €800/year to my tax consultant — and built my own tool instead
Published: May 2026 · 8 min read · Austrian investors · IBKR · KeSt · WHT reclaim
Every April, the same ritual. Coffee, spreadsheet, three browser tabs open to FinanzOnline.at, one to the ECB exchange rate archive. Four hours later, a wall of numbers that may or may not be right, and a nagging feeling that I'd missed something.
I'm an Austrian investor. I hold dividend-paying stocks and ETFs across three brokers — Interactive Brokers (IBKR), SAXO Bank, and a former E*Trade account from my time working abroad. None of them produce an Austrian-ready tax report. And Austrian tax law, it turns out, is aggressively particular about how you calculate capital gains.
Last year I reached my limit. I either hired a Steuerberater (again), spent another weekend in spreadsheet hell, or I built something better.
I built something better.
The problem nobody warns you about when you open an IBKR account
If your entire portfolio sits in a Flatex or Trade Republic account, stop reading — your broker handles the tax for you. Lucky you. There's good reasons NOT to be with those brokers but we'll touch that topic a little later.
If you're using IBKR, SAXO, or any non-Austrian broker, you are responsible for calculating and declaring your capital gains yourself. That means:
1. FIFO cost basis — strictly enforced. Austrian tax law (§27 Abs. 4 EStG) requires First-In-First-Out accounting for all positions. Sell 50 shares of Allianz? You need to know exactly which lot you bought first, when, at what price, and what the EUR/USD rate was on that exact date. Every. Single. Time.
2. Multi-year history is not optional. Sell a stock you bought three years ago? The correct cost basis starts three years ago. Forget to include 2021 data when running your 2024 calculation and your gains are wrong.
3. Withholding tax (WHT) needs to be tracked per country, per payment. Germany withholds 26.375% on dividends. Austria's treaty caps creditable WHT at 15%. The difference — 11.375% — is reclaimable from the German tax authority (BZSt). Most investors either don't know this, or think it's too much work. On a €10,000 dividend income from German stocks, that's over €1,000 left on the table every year.
4. Nichtmeldefonds. If you hold any US REITs, BDCs, or non-OeKB-registered funds, you owe annual tax on imputed income — even if you received no distributions. The calculation involves the year-end price, a formula from the InvFG, and a lot of patience.
I had all four problems. Simultaneously. Across three brokers.
Why I chose dividend stocks + IBKR over "steuereinfach" ETFs
Before I describe the tool, I want to address the question I get asked most: why not just buy accumulating ETFs via Trade Republic or Flatex and be done with it?
It's a fair question. The "steuereinfach" approach is genuinely simple. Your broker deducts KeSt at source, you don't touch FinanzOnline, and you can focus on other things.
Here's what that simplicity costs you.
The Austrian compounding myth. The standard argument for accumulating ETFs is that they compound better because dividends are reinvested without triggering tax. In the UK, Germany, or the US, this is true. In Austria, it is not.
Austria requires OeKB-registered funds to publish annual ausschüttungsgleiche Erträge (AE) — "imputed distributions." Even if the fund paid you nothing, if it earned dividends internally, you owe KeSt on the AE. Every year. Your broker deducts it automatically. The compounding benefit you thought you were getting? It's being taxed away annually, just without you seeing it.
The net result: a Vanguard FTSE All-World accumulating ETF (VWCE) has essentially the same Austrian tax profile as its distributing version (VWRL). You pay the same total KeSt. The only difference is whether you receive cash in your account or not.
What dividend stocks give you instead:
- Cash flow. Dividends land in your account. You decide whether to reinvest, spend, or save.
- Gain deferral. Capital gains are only taxed when you sell. A position up 80% over five years costs nothing in KeSt until the day you choose to exit. With an accumulating ETF you pay AE tax annually regardless of whether you've realised anything.
- WHT reclaim. On a portfolio with significant German, Danish, or French dividend income, you can reclaim 10–12% of those dividends from the source country's tax authority. This is money that steuereinfach investors leave behind permanently.
- Verlustausgleich. Within a single tax year, realised losses cancel realised gains directly. Sold a winner in March? Sell an underwater position in December and your net taxable gain shrinks — legally, by design. Steuereinfach brokers do offsetting internally, but you have zero visibility into how much was offset or whether the timing was optimal.
In my own portfolio, the WHT reclaim for just 2024 and 2025 amounts to around €760 across Germany (€706), France (€39), and Denmark (€12). That's not hypothetical upside — it's money I'm actively filing for. And it accumulates every year.
What the tool does
I spent several weekends building a Python-based pipeline I call KapFrei. It's not a SaaS product (yet) — it's a command-line tool that sits on top of your broker export files and produces everything you need to file your Austrian E1kv.
The one-time setup for IBKR takes about 20 minutes: configure a Flex Query in the IBKR portal (following the step-by-step guide in the documentation), and from then on KapFrei auto-fetches your latest transactions every time you run it. No manual CSV exports. No digging through PDFs.
Here's what a single run looks like:
python main.py --person matthias --year 2025
That's it. In under 10 seconds, it processes every transaction across all three brokers, applies FIFO to every sell, fetches ECB exchange rates, deduplicates dividends across overlapping files, and produces:
One underrated benefit of the Flex Query setup: because it reflects your live account, you can run KapFrei at any point during the year — not just at tax time. Holding a stock sitting on a large unrealised gain? Run it, see exactly where your KeSt bill stands today, and decide whether selling before December makes sense. It turns a once-a-year chore into an on-demand decision tool.
The E1kv numbers — ready to copy into FinanzOnline
══════════════════════════════════════════════
KAPITALERTRAG — E1kv KENNZIFFERN
Person : matthias | Year : 2025
══════════════════════════════════════════════
KZ 862 Inländ. Dividendenerträge EUR 1,613.10
KZ 863 Ausländ. Dividendenerträge EUR 11,422.64
KZ 994 Ausländ. Kursgewinne EUR 9,291.87
KZ 892 Ausländ. Kursverluste EUR 4,735.24
KZ 937 Ausschüttungsgl. Erträge EUR 3,583.21
KZ 899 KESt inländ. WP im Ausland EUR 443.60
KZ 998 Quellensteuer ausländ. EUR 1,286.20
Net taxable income EUR 20,068.46
KESt due @ 27.5% EUR 5,518.83
WHT creditable (max 15%) EUR 1,286.20
KeSt remaining to pay EUR 3,789.03
══════════════════════════════════════════════
Every number is directly transcribable into FinanzOnline's E1kv form. No interpretation, no guesswork. If you have the finanz_online.fastnr set in your config, it also generates a ready-to-upload XML file.
The Excel dashboard
The real workhorse is the Excel dashboard. It contains everything you'd want to see as an investor filing their own taxes — and everything a Steuerberater would charge you for.

Summary tab: All KZ Kennziffern with cross-sheet formula references. Domestic vs foreign breakdown. Verlustausgleich (KZ 891/892 losses offsetting KZ 981/994 gains) calculated automatically.

Dividends tab: Every dividend, every broker, every year. Gross amount, WHT paid, creditable WHT, net after KeSt. Sorted by amount. The row-level detail your Steuerberater would reconstruct manually from broker PDFs — already here.

Overview tab: Multi-year view of dividend income and capital gains/losses — at a glance, you can see whether your portfolio is generating the income you expected.

Freedom / FIRE tab: Portfolio holdings with current market value, dividend yield per position, and a projection of when your dividend income covers your monthly expenses. Interactive sliders for yield and growth assumptions. This isn't strictly required for tax filing — but once I had the data, building the FIRE projection took one afternoon and now it's the first tab I open every quarter.
The interactive Freedom Dashboard
The Excel Freedom tab is great for annual planning. KapFrei also generates a companion HTML file — open it in any browser, no spreadsheet software needed.

Drag the sliders: change your expected yield, monthly savings rate, or target expenses and the chart responds instantly. It's the clearest way to explore "what changes if I retire in 8 years instead of 12?" without touching a formula. And because it's generated from your real transaction data, the numbers aren't hypothetical — they're yours.
The WHT reclaim report
This is the feature that surprised me most when I first calculated the numbers.
Austria's tax treaties cap the WHT creditable against your KeSt at 15% for most countries. Germany withholds 26.375%. Denmark withholds 27%. France withholds 25%. The excess — every cent above 15% — is reclaimable directly from the source country's tax authority.
The tool calculates this automatically and generates a filing-ready breakdown:
── Germany (DE) — Total excess: EUR 1,316.62 ────────────────────────
┌─ 2024 (deadline: 2028-12-31, 955 days left)
│ Gross dividends from DE: EUR 2,407.70
│ WHT paid: EUR 635.01
│ Creditable @ 15%: EUR 361.16
│ Excess → RECLAIM: EUR 273.86
│
│ Symbol Gross EUR WHT EUR Excess EUR
│ ALV 690.00 181.99 78.49
│ BAS 544.00 143.48 61.88
│ VOW3 362.40 95.58 41.22
│ ...
└─ Subtotal 2024: RECLAIM EUR 273.86
┌─ 2025 (deadline: 2029-12-31)
│ Excess → RECLAIM: EUR 431.87
└─ Subtotal 2025: RECLAIM EUR 431.87
For Germany alone: €705 reclaimable across 2024 and 2025 — €274 for 2024 dividends, €432 for 2025. Add Denmark (€12) and France (€39) and the two-year total is around €760 on top of the standard KeSt filing. This money exists for every Austrian investor holding German, Danish, or French dividend stocks. Most people never file for it because they don't know it's there, or the calculation seems too complex.
KapFrei makes the calculation trivial. Filing still requires paperwork (a ZS-AD certificate from your Austrian Finanzamt, plus the source country's form), but knowing exactly what you're owed — per country, per year, per stock — removes the biggest barrier.
What it cost me vs. what I was paying
Before building this tool, I used a tax consultant for two years at around €600–800 per year. That included the E1kv filing and a review of my WHT credits. It did not include WHT reclaim filing — that was out of scope.
The tool took a few weekends to build (I'm a software engineer, so the raw development time was low). Running it each year now takes under 10 minutes including reviewing the output. Annual cost: effectively zero.
More importantly, KapFrei identified €760+ in reclaimable WHT across two years of German, Danish, and French dividends — money that would have stayed permanently with foreign tax authorities under the old arrangement. That's close to the annual consultant fee, recovered once. It repeats every year.
Current status and what's coming
The tool currently handles:
- ✅ IBKR (Flex CSV + annual activity exports, multi-year FIFO)
- ✅ SAXO Bank (AggregatedAmounts xlsx, ShareDividends, ClosedPositions, Portfolio PDF)
- ✅ E*Trade / Morgan Stanley (PDF statements, old and new format, RSU vesting)
- ✅ Nichtmeldefonds (§186 InvFG pauschal AE, cost-basis step-up on sale)
- ✅ Meldefonds / OeKB ETFs (KZ 936/937 with verified AE/WA figures)
- ✅ WHT reclaim (DE, DK, FR, NL — per-country, per-year, per-stock)
- ✅ FinanzOnline XML (direct upload to BMF)
- ✅ ANV checklist (L1 deduction reminders: Homeoffice, Pendlerpauschale, Steuerberatung)
- ✅ Portfolio advisor (yield analysis, concentration risk, FIRE coverage)
Coming soon: a web interface so you don't need to run Python from the command line. If you're an Austrian investor with an IBKR account and you'd like early access, reach out.
Closing thought
The Austrian tax system for capital income is genuinely complex — arguably more so than most of Western Europe. The FIFO rules, the NMF/Meldefonds distinction, the WHT treaty reclaim mechanism, the multi-broker reality for anyone who's worked abroad or held accounts at multiple institutions — none of this was designed with the self-directed investor in mind.
But the complexity is finite. It can be automated. And once it's automated, what was a 10-hour annual ordeal becomes a 10-minute check. The WHT reclaim money — real money that most investors leave uncollected every year — becomes something you actually file for.
If you're spending your Aprils in spreadsheet hell, you don't have to.
Questions or feedback? Reach out at kapfrei.at@gmail.com — or subscribe on Substack to follow along as the tool evolves.