Migrate from Databento
This guide is for developers who use the Databento Historical or Live API and want to move some or all of that work to Massive. It maps each common schema to the Massive endpoint that replaces it, and lists the differences that change your results. To compare the two products before you switch, see Massive vs Databento.
You do not need to move everything. Massive currently doesn't have L2 or L3 order book data, but new data and features ship often, so check the product roadmap for what's planned. If you use mbp-10 or mbo, keep Databento for that work and use Massive for longer stock history, options, forex, crypto, and fundamentals.
Before you start
- Sign up and copy your API key from the dashboard.
- Pick a plan for each market you use on the pricing page.
- Read the REST quickstart for the response shape that every endpoint shares.
Using AI?
Paste this into Claude Code, Cursor, Codex, or any coding agent that can read files and fetch a URL:
To let the agent check real responses while it works, connect the Massive MCP server. Massive also publishes skills and plugins for coding agents.
The request
Databento has one call, timeseries.get_range, and the dataset and schema pick the data. Massive has one path per data type.
Databento's end is exclusive, so a range that ends on October 3 sets end="2025-10-04":
Massive's to date is inclusive, so the range ends on October 3:
- Auth. Databento uses HTTP Basic with the key as the username. Massive takes the key in an Authorization: Bearer header.
- Long ranges. Databento streams the whole range in one response. Massive returns a next_url when there is more data. The Python client follows it for you.
- Cost. Massive plans are a flat monthly price, so you can remove calls to metadata.get_cost.
The response
Massive returns JSON, with one object per bar:
| Databento | Massive | Note |
|---|---|---|
| ts_event | t | Databento uses Unix nanoseconds. Massive stocks, options, forex, and crypto bars use Unix milliseconds |
| open | o | Databento stores prices as integers, where 1 unit is 1e-9. Massive returns decimals |
| high | h | |
| low | l | |
| close | c | |
| volume | v | |
| instrument_id | None | Massive bars belong to the ticker in the request, so you can remove ID mapping |
| None | vw | Volume-weighted average price |
| None | n | Number of trades |
- Daily bars. Databento ohlcv-1d uses UTC dates. Massive daily bars use Eastern Time sessions.
- Trades and quotes. Massive trades and quotes use nanosecond timestamps, like Databento.
- Futures bars. Futures Aggregates keep Databento's field names, such as open and high, and put a nanosecond timestamp in window_start.
- Quotes. Massive stock quotes are the consolidated NBBO. Databento mbp-1 on a venue dataset, such as XNAS.ITCH, is that venue's top of book, so prices and sizes differ.
Symbols
| Databento | Massive |
|---|---|
| AAPL as a raw_symbol | AAPL |
| SPY 231117P00486000, padded with spaces | O:SPY231117P00486000 |
| ES.FUT or ES.c.0 | A contract ticker, such as ESZ5. Massive has no continuous symbol, so pick the contract from Futures Contracts |
Prices
- Databento sells adjustment factors as a separate dataset. Set adjusted=false on Massive when you compare the two.
- EQUS.SUMMARY daily bars come from the Nasdaq summary, which includes post-market volume, so volume and close can differ.
Sources: Databento quickstart, timeseries.get_range, symbology, OHLCV schema.
Endpoint map
This map covers the most common calls. It is not a full list. To find the Massive endpoint for another call, search these docs.
| Databento schema or call | Massive endpoint |
|---|---|
| ohlcv-1s, ohlcv-1m, ohlcv-1h, ohlcv-1d | Stocks Custom Bars, Options Custom Bars, Futures Aggregates |
| trades | Stocks Trades, Options Trades, Futures Trades |
| mbp-1, tbbo, bbo-1s | Stocks Quotes, Options Quotes, Futures Quotes |
| mbp-10, mbo | Not currently available |
| definition | Options Contracts, Futures Contracts, Futures Products |
| imbalance, status | WebSocket only: Imbalances, LULD |
| symbology.resolve | All Tickers, Ticker Events |
| Corporate actions | Splits, Dividends |
| Security master | Ticker Overview, All Tickers |
| metadata.get_cost | Not needed. Plans are a flat monthly price |
Massive adds data that Databento does not sell: fundamentals, news, forex, and crypto.
Streaming
The Databento Live API is a raw TCP connection to one gateway per dataset, with DBN or JSON records. Massive streams JSON over WebSockets, with one connection per asset class:
- Stocks: wss://socket.massive.com/stocks, with trades, quotes, second bars, and minute bars.
- Options: wss://socket.massive.com/options, with trades and quotes.
- Futures: wss://socket.massive.com/futures, with trades and quotes.
This is a rewrite of the transport, not a port. Massive has no intraday replay, so use the REST endpoints to backfill after a reconnect. See the WebSocket quickstart.
Bulk history
Databento's batch.submit_job builds files for you to download, billed per GB. Massive flat files are already built and included in every paid plan. Download them over S3 from https://files.massive.com. Each file holds one day of one data type, such as stock trades, stock quotes, or options daily bars.
SDKs
| Language | Databento | Massive |
|---|---|---|
| Python | databento | client-python |
| C++, Rust | Official clients | None. Call the REST API directly |
| JavaScript, Go, Kotlin/JVM | None | client-js, client-go, client-jvm |
Sources
Databento details were checked against the Databento documentation on October 29, 2026. Databento is a trademark of its owner. Massive is not affiliated with Databento.