Methodology
Where the data comes from
Every number comes from the company's own fee schedule or help-center page, linked on each app page with the date we checked it. If a company doesn't publish a number, we show "Not published" or "Unknown" and never estimate.
How the calculator works
Cost per buy = flat fee + amount × (fee % + published spread %). Yearly cost = cost per buy × buys per year, plus any monthly account fee. Ten-year cost is the yearly cost × 10, with no investment growth, inflation or taxes. Daily means 252 trading days for stocks and 365 days for bitcoin.
Simplifications: one-time first-order fees (River's first order, Strike's first week) are left out. Spreads that aren't published count as zero and are flagged "+ spread", so those apps rank after equal-cost apps that publish. Public's flat fee uses the 1–3 symbol tier. M1's $3/month fee is included even though it is waived at $10,000+ in assets.
Weekly fee check
A script fetches every source page, extracts sentences about fees, spreads, minimums, frequencies and withdrawals, and hashes them. When the hash changes, the change is logged for review and the data is updated by hand after reading the official page.
Spread check
See Spread check. It compares public order-book asks with a median market reference. It does not measure prices inside retail apps.
Editorial independence
Rankings come from the data and can't be bought. The calculator and table sort only by published cost, the same way for every app. Sponsors and affiliate partners can't change fee data, sort order, "best for" labels or the change log. Sponsored placements are always labeled "Sponsored" and sit outside the rankings. If an app pays us and gets more expensive, we show that the same day we verify it.
Contact
Spotted an error? Email [email protected] with the official link.