bench.py and gen_comparison_mdx.py.
Routes returning 200
25 of 26 here, 25 of 26 on Financial Datasets
Median latency, cold
2219 ms here, 110 ms theirs
Measured spend
$0.0876 across 21 provider calls
Their equivalent
0.002 per request
Read the latency honestly
Financial Datasets is faster, and by a wide margin on most routes. They serve pre-ingested data from their own store. We compose each response live across upstream providers on every request, so on raw speed they should win, and they do. What that column cannot show is which sources a request touched, or what it cost to serve. That is the trade: you give up latency and get the provenance and the per-call price. If your workload needs sub-200ms reads, theirs is the better product and we would rather say so here than have you discover it in production. Several routes below show single-digit milliseconds and no provider call. Those are either a static catalog compiled into the binary, or a shared cache an earlier request in the same run had already populated. Both are genuinely free. Neither means data is missing.Route by route
What the provider route column means
Every upstream call is written to a receipts ledger with its provider, endpoint, Monid run id and measured cost. The chain above is read straight from that ledger, so a response’s whole path is reconstructable after the fact./institutional-holdings is the clearest example. It resolves the issuer’s SEC
CIK first, then reads the 13F feed: