BorderFolio/Blog/Why I built BorderFolio
My broker told me I’d made $18,000. It took me months to work out what that number meant.
31 August 2026 · Steffan Kharmaaiarvi · 16 min read
I spent years contributing to a portfolio, and my dashboard could tell me what it was worth to the cent — but never how it got there. Between the contributions I’d made, the market’s share, the dividends, the fees and the tax two different countries took, the story of how that wealth was built existed nowhere at all.
What this covers
- The plan was boring and it worked
- When the balance stopped telling me anything
- The portfolio got complicated, then simpler
- My return was two different numbers
- One country to live in, another to be taxed through
- Two steps, two countries, one dividend
- The threshold I crossed without noticing
- What I used before I built anything
- What it does
- What it can’t do
- What I’m measuring now
The number sat on the broker’s home screen, green, precise to two decimals. Roughly eighteen thousand dollars, earned from investing, over the whole period I’d been at it.
I looked at it for a long time and realised I didn’t know what it included.
Did it count dividends? The ones that were reinvested, or only the ones that landed as cash? Was that before or after the withholding tax that gets taken in a country I don’t live in? Did it include the positions I’d closed, or only the ones I still hold? Were the fees in there? Was it measured from my first-ever deposit, or from the day I opened this account and transferred everything across?
Each of those questions moves the number. Some of them move it by thousands. And the dashboard offered one figure, in green, with no way to open it up.
That’s the gap this whole story lives in: the distance between what my portfolio is worth and how it came to be worth that. It took me a while to understand that the second thing wasn’t hidden in some advanced tab. It didn’t exist. Nobody was keeping that history — not my broker, not my spreadsheet, and not any of the tools I tried.
The plan was boring and it worked
I’m a self-taught software engineer, twenty-four years old, and I’ve been deliberately accumulating capital for years with financial independence as the actual goal rather than a vague aspiration.
When I got serious about money I approached it the way I approach an unfamiliar system: read the primary sources, distrust anyone selling something, find the part that’s actually load-bearing. The primary sources turned out to be unfashionably boring. Malkiel on how badly the evidence treats stock-picking. Bogle on costs being the one variable you genuinely control. Swensen on diversification and the discipline to leave the thing alone.
So I did the boring version. Broad market exposure. A monthly transfer that went out before I could think about it. Reinvest everything. Don’t touch it.
The portfolio grew into six figures. I want to be precise about how, because it matters to everything that follows: it got there through contributions and time, not through a trade that went right. There is no story here where I called something early. The interesting variable in my portfolio has never been my stock selection — it’s been whether I sent the money, every month, including the months when doing so felt stupid.
My target was around $2,450 a month. I hit it sometimes. Other months I didn’t come close.
Then my income changed, and the balance stopped telling me anything
For a while the gap between plan and reality was small enough to ignore. Then my income changed, and my contributions became genuinely uneven — strong months, thin months, and some months with a gap in them.
This is the point where a portfolio balance stops functioning as feedback.
Because the balance still went up. Of course it did — I was still adding money, and the market was doing whatever it was doing. But “the balance went up” now had at least four possible meanings, and they demanded completely different responses from me:
- I contributed a lot and the market was flat.
- I contributed almost nothing and the market carried it.
- I contributed steadily and both worked.
- I contributed nothing, the market fell, and dividends and a favourable exchange rate papered over it.
The one question I actually needed answered was: am I still on track, even though I can put in less than I used to? And I couldn’t answer it from a balance, because the balance mixes my behaviour and the market’s behaviour into a single number and then refuses to separate them.
That’s when I started thinking about contributions as a thing worth measuring in their own right. Not as an input to a return calculation — as the primary record. How much new money went in this month. How many months in a row. Where the gaps were, and how long they lasted. What my rolling average actually was, as opposed to what I’d intended it to be. Whether the pace I was on still reached the next milestone.
Nothing I used tracked any of that. To every tool I owned, a deposit was a bookkeeping event that made the pie bigger.
The portfolio got more complicated, and then it got simpler
There’s a second thread here, and it turned out to matter as much as the first.
My portfolio didn’t stay the same shape. Early on I was interested in dividend income — I had a specific target of eventually receiving $500 a month, and I built toward it. Dividend-focused and income ETFs, a REIT position, the whole apparatus of trying to manufacture a cash flow.
Over a few years that changed. I came round to the view that during accumulation, income you immediately reinvest is mostly a tax event with extra steps — particularly when you’re being taxed on it by a country you don’t live in, which is a point I’ll come back to. What I converged on was much simpler and much less interesting to talk about: a global accumulating ETF as the core, short-term US Treasuries, and gold. Three ideas instead of a dozen.
That evolution taught me something I hadn’t expected, and it became a design principle later.
A portfolio tracker that only shows you what you hold today has thrown away most of what happened.
My current holdings say nothing about the dividend phase. They don’t show that I once had an income target, pursued it, and changed my mind. They don’t show which decision produced which part of the result. If you look at my positions today you’d conclude I’ve always been a three-fund accumulator, which is false, and it means you can’t learn anything from the actual history — including the parts I got wrong.
A holdings screen is a snapshot of the conclusion. I wanted the working.
Then I found out my return was two different numbers
Here’s where the project stopped being a preference and became a real problem.
I’d been computing my return one way. I computed it another way and got a different answer — not slightly different, opposite sign. The cleanest illustration of what was happening looks like this:
| Date | Event | Portfolio value |
|---|---|---|
| 1 Jan | Deposit $1,000 | $1,000 |
| 1 Jul | Holdings up 50% | $1,500 |
| 1 Jul | Deposit $9,000 — the plan is working | $10,500 |
| 31 Dec | Holdings fall 10% | $9,450 |
Time-weighted return — the number funds and indices publish, which deliberately cancels out the effect of deposit timing — chains the two sub-periods: 1.50 × 0.90 − 1 = +35%. An excellent year for the strategy.
Money-weighted return — XIRR, which dates every cash flow and asks what your money actually earned — solves to about −9.7%. You put in $10,000 and ended with $9,450.
Both are correct. The strategy had a great year; the investor lost $550, because 90% of the money only turned up for the bad half.
A tracker that shows one of these and labels it “your return” is answering a question you may not have asked.
I don’t think that’s dishonesty on anyone’s part. It’s compression — one percentage is a nicer product decision than two percentages and an explanation. But the compression is exactly where the information I wanted was going.
Once I saw it, the whole vocabulary came apart. There are at least four things people mean by “return,” and they are not variations on a theme:
- Unrealized gain is the revaluation of positions I still hold against what I paid for them. It says nothing about anything I’ve sold, and nothing about income.
- Realized gain is what I locked in by actually closing positions. Real, spendable, usually taxable somewhere.
- Personal return (XIRR) is the annualised rate my actual money earned, with every deposit weighted by how long it was invested. For someone contributing monthly, this is the number that describes lived experience — and it’s the only common metric that admits a January deposit and a December deposit are not equal contributors to the year.
- Portfolio return (TWR) is how the strategy performed with deposits and withdrawals removed. It’s the only number comparable to an index, because it’s the only one that isn’t contaminated by how much money you happened to have in at the time.
For an uneven contributor, the gap between the last two isn’t noise. It’s the finding. When they diverge sharply, it means the timing of my contributions — not my fund choices — dominated the year. That’s actionable in a way that neither number is alone.
And it reframed my $18,000. That figure needed to be broken into contributions I’d made, market movement on positions held, gains I’d actually realised, income received, and costs paid — and only then does it mean anything. Presented as one number, it isn’t a result. It’s a rumour.
The full arithmetic behind all four figures, with worked examples: how to track portfolio performance.
Living in one country, taxed through another, invested in a third
The second half of the problem is geography, and it made everything above harder.
I moved between countries. I now live in South Africa and run my business through Georgia, my brokers are elsewhere again, and my funds are legally registered in countries I’ve never set foot in. That isn’t an exotic arrangement any more — it’s increasingly ordinary for anyone whose work stopped requiring a specific building.
At some point I listed where my financial life physically was, and it came out as four separate jurisdictions with no obligation to agree with each other:
- Where I live — my tax residence, which decides what I owe at home and which changes when my life changes.
- Where my business is — a separate country with its own rules, which is where my income is structured before it ever becomes a contribution.
- Where my broker is — which determines what documentation exists between me and a foreign tax authority, what protections cover me, and, as I found out, which funds I’m even allowed to buy.
- Where each fund is domiciled — Ireland, Luxembourg, Delaware. Not the same as where the fund invests. Not the same as the exchange I buy it on. And the single biggest determinant of what happens to a dividend before it reaches me.
I started, like most people, with the assumption that a fund is a fund: pick the index, find the cheapest vehicle tracking it, buy it. Ticker and expense ratio, done. Inside a single country that’s correct advice.
The first crack was discovering that some of the largest, cheapest, most famous US ETFs simply weren’t purchasable through a European broker at all — a documentation rule blocks them for retail investors there. It’s why so many international portfolios hold the UCITS version of a global index rather than the US-listed one. That isn’t a preference anyone arrived at by analysis. It’s a jurisdictional fact that gets mistaken for a choice.
The second crack was a dividend that arrived visibly smaller than I’d modelled. Not a fee. Not a bad quarter. It had been taxed before it reached my account, by a country I don’t live in, at a rate I didn’t know applied to me.
One dividend, two places it can be taxed
Here’s the mechanic nobody explains until you go looking, and which I now think is the most under-appreciated fact in international index investing.
A foreign dividend can pass through two separate tax layers: withholding at source, and taxation in the investor’s country of residence. Whether the second one takes anything depends entirely on where you live.
Step one, at the source. The fund’s country takes its cut before the money leaves. For a non-US investor in a US-domiciled fund, the statutory US rate is 30%. A tax treaty commonly reduces that to 15% — but only where your broker holds valid documentation for you, and that paperwork expires. No treaty between your residence and the US, no reduction.
Step two, at home. Your country of residence then taxes the same dividend under its own rules — flat rate, marginal rate, a credit for what was already withheld, or nothing at all.
The two steps are independent, which produces the result that surprises everybody: moving somewhere with low or no dividend tax does not make step one disappear. People relocate partly for the tax treatment and then stay quietly annoyed for years about a haircut that no amount of local policy can reach.
Here’s the first step alone on an illustrative portfolio throwing off $571 a year in dividends from US-domiciled funds:
| Tax residence | US treaty status | Withheld at source | Reaches you |
|---|---|---|---|
| United Arab Emirates | No US tax treaty | 30% · $171 | $400 |
| Portugal | Treaty rate on portfolio dividends | 15% · $86 | $485 |
| Germany | Treaty rate on portfolio dividends | 15% · $86 | $485 |
Eighty-five dollars a year of difference on an identical portfolio, before anyone has picked a single stock. It recurs annually and compounds against you. On a portfolio ten times the size it’s $850 a year.
Same funds, same amounts, same dates. Different residence.
This is also, incidentally, why my interest in dividend income cooled. A strategy built on receiving cash you intend to reinvest immediately is a strategy built on volunteering for step one, over and over, every quarter. That’s a perfectly reasonable trade for someone actually living on the income. It’s a strange one for someone accumulating.
There’s an elegant wrinkle here. An Irish-domiciled UCITS fund holding US stocks pays 15% US withholding at the fund level, because Ireland has a treaty with the US — and Ireland then charges nothing further on distributions to non-residents. So an investor in a country with no US treaty can end up paying 15% instead of 30% on the same underlying index, purely because of where the fund is registered.
The obvious conclusion is that everyone outside the US should hold Irish UCITS. I believed that for about a week, then ran it per holding, and it fell apart:
- One switch netted about +$32 a year. Worth doing.
- Another netted −$7 a year. That fund barely pays dividends, so there was almost no withholding to save — and the UCITS alternative’s higher expense ratio is charged against the entire position, not just the income.
Counting only the tax saved makes every row look free. But the tax saving scales with dividend yield, while the expense-ratio penalty scales with your whole balance. Which one wins depends on the specific fund, your portfolio size, your residence, and the fund’s own costs — and it can flip as the position grows. Lower withholding does not mean better. It means one term in the equation improved.
That’s not a question I wanted an opinion on. I wanted the arithmetic, both sides of it, on my actual holdings.
The threshold I crossed without noticing
There’s a third country effect, and I found it embarrassingly late.
A non-US person’s estate can be exposed to US estate tax on US-situs assets above $60,000 — a category that includes US-domiciled ETFs and individual US stocks — at rates reaching 40% on the excess. Not income tax. Estate tax. The exemption for US residents runs into the millions; the sixty-thousand-dollar figure that applies to everyone else was set long ago and never meaningfully revisited.
Whether it actually bites, and how hard, depends on things no dashboard can know: whether an estate tax treaty covers your country and what relief it gives, which deductions are available, how the assets are held, and the circumstances of the estate itself. So this is a line worth knowing you have crossed — not a bill anyone can compute for you. Knowing was the part I wanted.
A long-term index investor crosses that line in an ordinary month of an ordinary year with nothing whatsoever marking the occasion. No email, no warning, no change of state on any dashboard — because from the dashboard’s point of view, nothing happened.
I’d crossed it long before I knew it existed.
And none of this is static, because people move. When your residence changes, the portfolio doesn’t move — not one share changes hands — but the withholding rate on every future dividend changes, the tax treatment at home changes, and sometimes what you’re permitted to buy changes too. Which means the honest answer to “how much tax did this portfolio lose?” isn’t one rate applied to a history. It’s the rate that applied at the time, changing partway through, applied to the dividends actually paid in each period.
There’s a smaller cousin of this that’s just as corrosive: currency. If a tool converts a contribution from three years ago at today’s exchange rate, your savings history silently resizes itself every time the currency moves. Flows belong at the rate on the day of the trade; only what you hold today belongs at today’s rate. That sounds pedantic until you’ve watched your own record of what you contributed change while you weren’t looking, and had to decide which version to believe.
What I actually used before I built anything
For a long time my system was five things that each held one piece of the answer.
The broker dashboards showed current holdings and current value, accurately, for the period each account had existed — and treated transfers in as if I’d bought that day, erasing years of cost basis.
The statements had the real transaction history, in PDF, in formats that differed by broker and sometimes by year.
A spreadsheet tracked contributions, and honestly it worked. =XIRR(values, dates) is built into Excel and Sheets: deposits negative, current value positive, done. For one currency and one broker it’s still the right answer. Mine broke down when statements arrived in three formats, withholding rates had to be looked up per fund, and flows spanned currencies. Not because the maths got hard — because the data entry got hard, and every manual step is a place where last year’s numbers quietly change.
The dividend pages showed income, usually gross, sometimes net, rarely labelled clearly enough to tell which.
And my tax research lived in a completely separate universe of treaty tables, fund factsheets and forum threads, connected to my actual portfolio by nothing but my own memory.
Every piece of the answer existed. The answer didn’t. Nothing in that pile could produce a single coherent history of how the money got there — and reconciling it by hand took an evening, which meant I did it approximately never.
That’s the insight the product came out of, and it’s less romantic than “I couldn’t find it so I built it.” I could find plenty of tools. They were all built on the assumption that a portfolio is a set of positions with prices. Mine is a set of decisions with dates, made from three countries, and the positions are just what’s left over.
Your broker shows what your portfolio is worth. I wanted something that shows how you built it.
What it does
That became BorderFolio, a contribution-first portfolio tracker for long-term international investors. The brief was narrow on purpose.
Statements go in — PDF, CSV, a screenshot of a broker app, or typed by hand. No broker credentials and no permanent connection, because I didn’t want to hold anyone’s login, including my own. Out of those confirmed transactions comes a history rather than a snapshot.
It keeps contributions as a first-class record: dated, distinguished from reinvested income, with the rhythm made visible — streaks, gaps, rolling average, and pace against the plan. That’s the part built directly out of my own uneven months, and it’s the screen I open most.
It separates the result into its actual components: contributions, market growth, income received, fees and withholding, realized and unrealized gains. It reports personal return and portfolio return side by side rather than picking one and calling it “return” — and it computes TWR only where the valuation history genuinely supports it. It keeps a monthly snapshot, so the past stays the past instead of being recomputed every time a price moves. It tracks progress toward milestones from $10,000 up to $1 million.
And it puts the cross-border layer next to the portfolio instead of in a browser tab: withholding resolved per instrument from that fund’s domicile and your configured tax residence, and the structural comparison shown with both sides — the withholding you’d save against the expense ratio you’d pay.
When a metric can’t be computed, it says so rather than printing a zero. A number that can’t be worked out and a number that genuinely is zero must never look the same on a screen.
It doesn’t trade, doesn’t connect to your bank, and doesn’t have an opinion about what you should buy.
What it can’t do
It’s early, and I’d rather say the limits out loud than let you find them.
The current version is built on statement imports rather than live broker APIs. That’s a deliberate trade — no credentials, no fragile integrations — but it means you upload something once a month rather than watching it update itself.
Every calculation is only as good as the records imported. A missing statement is a hole in the history, and the honest response to a hole is to show it, not to interpolate over it.
Time-weighted return needs a valuation of the portfolio around every external cash flow. Where one is missing, the standard workaround is an approximation, and it’s labelled as an approximation rather than blended into a headline figure. Which means the portfolio-return number genuinely improves as monthly history accumulates, and I can’t make that instant. I tried. You can’t reconstruct a valuation nobody recorded.
The cross-border figures are informational estimates built from published treaty rates and fund documents. They can’t see your personal circumstances, and they are emphatically not tax advice. I’ve written up how the numbers are derived rather than asking anyone to take the output on faith — if a tool is going to tell you something about tax, you should be able to check its work.
And nothing in it, including my own portfolio’s shape, is a recommendation. The three-part structure I ended up with fits my situation, my residence and my timeline. It is not advice, and I’d be uncomfortable if anyone read it that way.
What I’m actually measuring now
My next milestones are $200,000 and then $250,000, with a million as the long-term destination. What I watch now isn’t the balance — it’s the contribution record, the split between what I put in and what the market did, and the gap between my personal return and the portfolio return.
Because the honest version of my situation is that I contribute less consistently than I once did, and the balance alone will never tell me whether that’s a problem. Only the breakdown can. Some months the answer is “you’re fine, the pace still reaches the milestone.” Some months it isn’t. Both are useful; neither is visible in green two-decimal form on a broker’s home screen.
If you invest across borders on a regular schedule — if your funds are registered somewhere you’ve never been, your broker is somewhere else, and your dividends arrive smaller than they should for reasons nobody has fully explained to you — this was written for that situation, because it’s mine. The free tier is enough to see whether the idea holds up on your own numbers.
What I’d most like to hear is what’s still missing, or wrong. The interesting failures in a tool like this aren’t crashes — they’re a number that’s confidently, plausibly, quietly incorrect. If you find one of those, I want to know about it more than I want a signup. admin@borderfolio.app.
BorderFolio provides informational portfolio analytics only. Nothing here is investment, financial, legal or tax advice, and no figure in this article is a recommendation to buy, sell or hold any security. Illustrative figures are exactly that. Tax rules change and depend on individual circumstances — verify anything that matters with a qualified adviser in your jurisdiction. See the investment & tax disclaimer.