‹ Blog

What We Learned Connecting 18 Exchanges — The List of Things APIs Don't Give You Is the Reason Portfolio Tracking Is Hard

Columns · · Satoshi Note Editorial

Read in: 한국어

"API connection" suggests that your records on an exchange flow over in one piece. We believed that too, at first. After wiring up 18 exchanges one by one (5 Korean, 4 Japanese, 9 elsewhere) we learned the opposite. An exchange API gives you what it feels like giving. And the list of what it withholds overlaps, almost exactly, with the answer to "why is portfolio tracking so hard?" This column is that list.

At a glance

  • Connecting an exchange API does not bring in your whole history. Across 18 exchanges, Satoshi Note (TokenPost's free crypto portfolio tracker) hit three kinds of gap: time windows get cut, some exchanges must be asked coin by coin, and anything that is not a trade is left out.
  • Time limits, for example: GMO Coin the last day only, Korbit 36 hours, OKX 3 months of spot, Bybit 180 days on first connection. Upbit and Bithumb have no "all my fills" call and must be queried per coin.
  • Satoshi Note records balance differences as exchange transfers and prints what each exchange withholds in the "What gets imported" box on its card. Records from before the connection are gone for good if the exchange does not serve them.

They cut the time window

The first wall is time. Very few exchanges hand over a full trade history.

ExchangeTrade history available
GMO CoinThe most recent day only
KorbitThe most recent 36 hours only
OKXSpot, last 3 months only
BybitLast 180 days on first connection

GMO Coin is the extreme case. Trades from the day after you connect can be collected daily and stacked up, but anything from before the connection is gone as far as the API is concerned. Korbit is similar at 36 hours. So on those two, connecting means "records accumulate from now on," not "your past comes in." What we can do is say so on the connection screen before you connect, and let you enter older trades by hand on the calendar.

They make you ask coin by coin

The second wall is the shape of the question. Upbit and Bithumb have no "give me all my trades" call. You have to ask per coin: BTC trades, then ETH trades, and so on. That means the app has to know what to ask for, and an app does not know which coins you have traded.

Our approach is to ask about the coins in your current balance plus the coins already in your records. The consequence is that a coin you bought and fully sold long ago, now absent from your balance, can be missed on the first sync. Korbit goes one step further: we only ask about coins already in your records. This is not a limit that better code removes. It comes from the exchange deciding what shape a question can take.

They don't give you anything that isn't a trade

The third wall hurts the most for portfolio tracking. A trade history is "things you bought and sold." But many things move an account balance besides buying and selling.

  • Deposits and withdrawals. Robinhood has no API for them at all, and on bitFlyer, bitbank, Kraken and Gemini we do not fetch them yet. A coin you moved in from another exchange shows up in the balance with no trade behind it.
  • Other products inside the exchange. Coincheck's "sales counter" (where the exchange sells to you directly) and its savings service are not in the API. You bought the coin in the exchange's app, but the API cannot see it.
  • Points. Bithumb mixes points (P) into the balance as if they were a coin. They are not, so we leave them out of the total.

When these are missing, the numbers drift: "the balance says 10, the trades add up to 7." How an app treats those missing 3 is about half the reason returns differ between apps. We wrote about that separately in an earlier column.

So here is what we chose

We cannot fill every gap, so we settled on two things.

First, balance reconciliation. When the quantity computed from trades differs from what the exchange reports, we record the difference as "received from / sent to exchange" and match the balance side. We do not know where it came from, but at least the total agrees with the exchange. The cost basis still does not travel with it, and fixing that is the first item on our list for the rest of the year.

Second, saying it up front. Each exchange card under Settings › Connect exchanges has a "What gets imported" box with one line per thing that exchange does or does not give: "GMO Coin: trades from the most recent day only," "Robinhood: no deposits or withdrawals." So you can read it, and be disappointed, before you connect rather than after.

What the list of gaps tells you

Put the gaps from 18 exchanges side by side and one thing stands out. Exchange APIs are built to show trades that happened inside that exchange. They were never built to show one person's whole portfolio. Coins that arrived from another exchange, wallets outside the exchange, income that is not a trade: all of it sits outside the original design.

So the reason portfolio tracking is hard for anyone using two or more exchanges is not that apps are badly built. It is that the raw material only comes in that shape. We think the mark of a good portfolio app is not "it pulls everything from the API" but "it shows you where and how it wrote down the things it could not pull."

FAQ

Does connecting an API import my full trade history?

It depends on the exchange. GMO Coin serves only the last day, Korbit 36 hours, OKX 3 months of spot trades, Bybit 180 days on first connection. Anything older cannot be fetched by API, so a connection accumulates from the day it is made.

Why do only some of my Upbit or Bithumb fills come in?

Neither exchange has an "all my fills" endpoint; they must be asked per coin. Satoshi Note asks for the coins in your balance and the coins already on record, so a coin you fully sold (balance zero) has to be named by you before it can be fetched.

Where can I see what each exchange imports?

On each exchange card under Settings › Connect exchanges, in the "What gets imported" box, and on the exchange connection guide at satoshinote.io/exchange-guide.


This is a column: the Satoshi Note team's view, not a recommendation for or against any exchange. What we do and do not fetch from each exchange is listed in the "What gets imported" box under Settings › Connect exchanges and in the exchange connection guide.

‹ Blog

Satoshi Note is a free crypto portfolio tracker by TokenPost. It brings holdings, P&L and trade history from 13 exchanges into one screen and shows what top Hyperliquid, Lighter, dYdX and Pacifica traders hold right now. Open Satoshi Note