Comparison
FinzData vs QuantConnect: your data, yours to keep
FinzData is the whole market, remembered, and it belongs to you. Every one of the 16,000+ US stocks that has traded on the NYSE and Nasdaq in the last 26+ years, delisted included, point in time; dealer gamma for single stocks, ETFs and the major indexes; 18,000+ macro series with every vintage kept; 139 futures markets with every contract since 2007; COT positioning since 1986; bars from tick to daily. You buy it once, download it as CSV or Parquet, and carry it into any backtester, any cloud, any notebook and any AI agent, including LEAN through our one-file integration. QuantConnect's terms keep its data inside its platform. You are locked in. FinzData's data goes wherever your research goes.
FinzData vs QuantConnect at a glance
A platform rents you access. FinzData gives you the archive. Here is the difference in one table.
| What matters to a quant | FinzData | QuantConnect |
|---|---|---|
| Download the data and keep it | ✓ CSV or Parquet, yours to keep | ✗ Use only inside the platform (Terms §2.6) |
| Use it in any backtester, notebook or cloud | ✓ Any stack, any cloud, LEAN included | ✗ Inside the platform only |
| Your own AI agents read the data in your own tools | ✓ MCP server, Python client and agent pricing | ✗ Terms name AI agents as a prohibited route |
| Keep the history when you stop paying | ✓ The years you bought stay yours | ✗ Access ends with the subscription |
| Point-in-time dealer gamma (GEX) for single stocks, ETFs and the major indexes | ✓ Daily, stamped when known | ✗ Not in the Dataset Market |
| Macro as first published, every vintage | ✓ 18,000+ series, every revision kept | ✗ No first-release vintage dataset listed |
| Macro regime labels (growth, inflation, liquidity, credit, risk) | ✓ The Quantitative Model, as issued | ✗ Not in the Dataset Market |
| Monthly price, whole US market | ✓ $19.95/mo* | $84/mo platform subscription, data stays inside |
* Plus $195 once for 5 years of the whole US market.
Get a free API key See the whole US market for $195
QuantConnect facts from quantconnect.com/terms (§2.6), quantconnect.com/pricing and its Dataset Market, checked 2026-10-17 to 2026-10-21.
The sentence
From QuantConnect's Terms of Service (§2.6), checked 2026-10-17:
"Data provided through QuantConnect may only be used inside the QuantConnect platform."
Export and extraction are prohibited by any means — the terms name the routes explicitly: including through logs, charts, Object Store downloads, network requests, the API, the MCP server, or AI agents. Read that last one again. The workflow this industry is moving to — an AI agent reading your research data in your own tools — is the workflow the terms single out.
Everything you build on that data inherits the confinement. Your backtests, your universes, your derived datasets: usable inside the platform, for as long as you subscribe, and nowhere else, ever.
A QuantConnect alternative you own: what you get with FinzData
- Ownership. Buy the years once and keep them. Bulk files and Parquet on your own machines, under a licence that lets you use them in any stack, any cloud and any future platform. Stop the updates and the history you bought stays yours.
- Breadth. 16,000+ US stocks with the delisted names still in them, 231 ETFs, 139 futures markets with 17,605 contracts, 18,000+ macro series, COT since 1986, 13F for every manager, options-market gamma, crypto since 2015 and point-in-time fundamentals, on one key.
- Depth. 26+ years of history at every resolution you backtest on: 1-minute, 5-minute, 15-minute, 30-minute, hourly and daily, with tick-level trades on the Institutional plan.
- Time, kept honest. Every row is stamped with the moment it became known. Macro arrives as first published, GEX as it stood after the close, COT on the day the CFTC released it.
- Signals no one else sells this way. Point-in-time dealer gamma exposure, the gamma flip and the walls, and the Quantitative Model's regime labels for growth, inflation, liquidity, credit and risk.
- Built for AI. A Python client that works like yfinance, an MCP server for Claude and ChatGPT, and an agent pricing tier, so your own agents read your data in your own tools.
- Value. The whole US market from $195 once plus $19.95 a month for daily updates, one ticker from $19, and no API call limit on any paid purchase.
Already building in LEAN? Our one-file integration (below) brings FinzData into QuantConnect Cloud and local LEAN, and the files stay yours outside it.
The industry's best value
The industry's best value. Start with exactly what your research needs, pay once, and own it:
The one-time price buys the history outright. Daily updates are $19.95 a month, and they are your choice: stop them at any time and every year you bought stays yours, so your cost stops at the one-time price.
Start free. A free key is $0: 1,000 calls a day and the last 12 months of every dataset, no card required. Every price is on the shop.
Use FinzData in QuantConnect and LEAN
One Python file carries FinzData into QuantConnect Cloud and local LEAN: survivorship-free prices, point-in-time GEX for single stocks, ETFs and the major indexes, macro as first published, regime labels, COT and continuous futures. Every row arrives only when the world could have seen it. And because you own what you buy, the same history works in every other tool you use.
Set up FinzData in LEAN in three steps
- Add the file. In your project, create
finzdata_qc.pyand paste in the module. With the LEAN CLI, drop it next tomain.py. - Add your key as a parameter. Name it
finzdata-api-key. With the LEAN CLI, put it underparametersin the project'sconfig.json. - Subscribe to data. In
initialize:
from finzdata_qc import FinzData, FinzDataGex, FinzDataMacro
FinzData.set_api_key(self.get_parameter("finzdata-api-key"))
self.gex = self.add_data(FinzDataGex, "SPY", Resolution.DAILY).symbol
self.unrate = self.add_data(FinzDataMacro, "UNRATE", Resolution.DAILY).symbol
Each point arrives in on_data like any other subscription. data[self.gex].value is the net GEX in billions, and every other column is there by name, such as data[self.gex]["flip"] or data[self.gex]["call_wall"].
What you can add
| Class | Symbol example | Endpoint | value | Usable in the backtest at | What it is |
|---|---|---|---|---|---|
FinzDataBars | "AAPL" | /v1/prices/daily | close | 16:00 ET on the bar date | Daily OHLCV, split-adjusted, including delisted names |
FinzDataGex | "SPY" | /v1/gex/daily | net_gex_bn | 17:00 ET on the date | Dealer gamma: net GEX, flip, call wall, put wall, regime |
FinzDataMacro | "UNRATE" | /v1/macro?vintage=all | value | 16:00 ET on the day each figure was published | Every vintage of a macro series, so revisions never leak into a backtest |
FinzDataRegime | "macro_quadrant" | /v1/model/labels | regime code | 16:00 ET on the date the label was issued | Quantitative Model regimes: growth, inflation, liquidity, credit, risk and the macro quadrant |
FinzDataCot | "13874A" | /v1/cot?report=legacy_fo | speculator net | Friday 15:30 ET after the Tuesday report date | CFTC Commitments of Traders, by contract code |
FinzDataFutures | "ES" | /v1/futures/daily?continuous=true | close | 17:00 ET on the date | Continuous back-adjusted futures, with the active contract |
Columns you can read
| Class | Columns, as data[symbol]["name"] |
|---|---|
FinzDataBars | open, high, low, close, volume |
FinzDataGex | net_gex_bn, flip, call_wall, put_wall, spot and the other daily GEX fields |
FinzDataMacro | value, observation_date (the period the figure describes), realtime_start (when it was published) |
FinzDataRegime | label (as issued, e.g. REFLATION), data_through (the last data the label used) |
FinzDataCot | net_noncommercial, plus every column of the CFTC legacy report, such as open_interest_all |
FinzDataFutures | open, high, low, close, volume, contract (the contract active that day) |
Time, kept honest
Each class releases a row only when the world could have seen it. GEX arrives after our 17:00 ET compute. COT positions taken on a Tuesday arrive on the Friday the CFTC published them. Macro figures arrive at the close of the day they were published, with the period they describe kept in observation_date. Your backtest trades on what was known, and nothing more.
Example algorithm
Hold SPY while dealers are long gamma, step aside when they turn short gamma, and watch the unemployment rate as it was first published. It shows the mechanics; it is not a recommended strategy.
# FinzData x QuantConnect: example algorithm (Python).
# 1. Add finzdata_qc.py to your project (download: https://finzdata.com/quantconnect/finzdata_qc.py)
# 2. Add a project parameter named "finzdata-api-key" with your key (free key: https://api.finzdata.com)
# 3. Backtest. Free keys return the last 12 months; paid plans return full history.
from AlgorithmImports import *
from finzdata_qc import FinzData, FinzDataBars, FinzDataGex, FinzDataMacro
class FinzDataGammaExample(QCAlgorithm):
"""Hold SPY when dealers are long gamma (calmer markets), step aside when they are short gamma.
An illustration of point-in-time GEX in LEAN, not a recommended strategy."""
def initialize(self):
self.set_start_date(2025, 11, 1)
self.set_cash(100000)
FinzData.set_api_key(self.get_parameter("finzdata-api-key"))
self.spy = self.add_equity("SPY", Resolution.DAILY).symbol
self.gex = self.add_data(FinzDataGex, "SPY", Resolution.DAILY).symbol # dealer gamma, known at 17:00 ET
self.unrate = self.add_data(FinzDataMacro, "UNRATE", Resolution.DAILY).symbol # unemployment rate, as first published
self.last_unrate = None
def on_data(self, data: Slice):
if data.contains_key(self.unrate):
self.last_unrate = data[self.unrate].value
if not data.contains_key(self.gex):
return
g = data[self.gex]
self.plot("GEX", "net_gex_bn", g.value)
self.plot("GEX", "flip", g["flip"])
if g.value > 0 and not self.portfolio[self.spy].invested:
self.set_holdings(self.spy, 1.0)
elif g.value < 0 and self.portfolio[self.spy].invested:
self.liquidate(self.spy)
Running locally with the LEAN CLI
pip install lean
lean init
lean project-create --language python "FinzData Gamma"
# copy finzdata_qc.py and the example into "FinzData Gamma", set finzdata-api-key in config.json
lean backtest "FinzData Gamma"
Who should choose FinzData
Choose FinzData if the data itself is the asset: you want survivorship-free, point-in-time history as files you own; you run or plan to run your own stack, your own cloud or AI agents over your data; you want dealer gamma, every macro vintage and regime labels beside your prices; or you simply refuse to let a terms-of-service sentence own your research archive.
Point it at whichever history your research stands on, starting with a free key.
Start with the whole market, for free
A free key gives you the last 12 months of every dataset, 1,000 calls a day, no card. When you are ready, the whole US market is $195 once, every paid purchase has no call limit, and everything you buy is yours to keep.
Sources and corrections
Prices and product terms checked 2026-10-17 against quantconnect.com/pricing, quantconnect.com/terms (§2.6) and finzdata.com. If any figure on this page is wrong, tell us and we will correct it with the date of the correction.
Frequently asked questions
Can I take QuantConnect's data out of the platform?
No. QuantConnect's Terms of Service (§2.6) say the data "may only be used inside the QuantConnect platform", and export and extraction are prohibited by any means — the terms name the routes explicitly, including the API, the MCP server and AI agents.
How much does QuantConnect cost per year?
At minimum configuration: Researcher $1,008 per year (1 user), Team $4,032 (2 users), Trading Firm $11,520 (2 users), Institution $76,320 (5 users). FinzData's whole US market is $195 once plus $19.95 a month, and the data is yours to keep.
What do I hold at the end of a year with each?
With QuantConnect, access — current while you pay. With FinzData, the history itself: bulk files and Parquet on your machines, under a licence that lets you use them in any stack, any cloud, any future platform.
Can my AI agents read the data?
QuantConnect's terms name AI agents among the prohibited extraction routes. FinzData publishes an agent pricing tier for exactly that workflow: free calls daily per key, then per-call pricing.
Do I have to leave LEAN to use FinzData?
No. FinzData's one-file integration (finzdata.com/quantconnect) brings our data into QuantConnect Cloud and local LEAN, and because you own the files, the same history works in every other tool you use.
Is FinzData a QuantConnect alternative?
Yes, for the data layer. FinzData sells 26+ years of US stocks with delisted names, point-in-time GEX, 18,000+ macro series with every vintage and 139 futures markets as files you own, and a one-file integration brings the same data into LEAN.
Does the integration work in QuantConnect Cloud and local LEAN?
Yes. The classes are standard LEAN custom data, so the same file runs in a cloud project and with the LEAN CLI on your machine.
Is there look-ahead bias in the LEAN classes?
No. Each class stamps rows with the time the data was actually available: GEX after the 17:00 ET compute, COT on the Friday it was released, and macro figures at the close of the day each vintage was published.
Where do I put my FinzData API key in LEAN?
Add a project parameter named finzdata-api-key and call FinzData.set_api_key(self.get_parameter("finzdata-api-key")). Never paste the key into code you share.
Why does data[symbol] raise a KeyError?
Daily custom data does not arrive on every slice. Check data.contains_key(symbol) first, as the example does.
Does it work in live trading?
Yes. In live mode each class fetches only recent rows, and new rows arrive after the same release times as in backtests.