Download Binance funding rate history (CSV) for any perpetual
Monthly fundingRate files on data.binance.vision cover every USD-M perp since listing.
Why it happens
Files are monthly, for example
futures/um/monthly/fundingRate/BTCUSDT/BTCUSDT-fundingRate-2026-09.zip, with columns
calc_time, funding_interval_hours, last_funding_rate. A positive rate means longs pay shorts.
The interval is in the file, so read funding_interval_hours rather than assuming three
payments a day.
Fix it with plain pandas
import pandas as pd
f = pd.read_csv("BTCUSDT-fundingRate-2026-09.zip")
f.index = pd.to_datetime(f["calc_time"], unit="ms", utc=True)
annualised = f["last_funding_rate"] * (24 / f["funding_interval_hours"]) * 365
print(f"mean annualised funding: {annualised.mean():.1%}")
Or with Deptho
Once you have the series, Deptho charges each funding event against the position you actually held at that moment.
from deptho import datasets as bn
import deptho as dp
funding = bn.read_funding("BTCUSDT-fundingRate-2026-09.zip")
cost = dp.funding_cost(positions, funding) # per-bar cost, + = you paid