Skip to main content
Every number here was measured on 2026-09-04 by sending the same request to both APIs back to back from the same machine. Our cost comes from the receipts ledger, so it is the amount actually billed, not an estimate. Regenerate with 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.0500at0.0500 at 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:
Financial Datasets publishes neither the sources a request touched nor what it cost them to serve.

Cost, stated fairly

Financial Datasets bills by request count, not per dataset. Build is 200/monthwith100,000requestsincludedand200/month with 100,000 requests included and 10 per additional 1,000; Scale is 2,000/monthwith1,000,000includedand2,000/month with 1,000,000 included and 5 per additional 1,000. Both work out to $0.002 per included request. Our costs above are per call and vary by route, from 0.0006to0.0006 to 0.0100. The expensive routes are the extraction and scrape-backed ones. A workload made mostly of those costs more per call than their included rate, and for high-volume use of them a subscription is genuinely cheaper. Where we win is the floor. Their 200isduebeforethefirstrequest.Thewholerunabovecost200 is due before the first request. The whole run above cost 0.0876. Generated 2026-09-04 from 26 routes.