Compare

Quandl Alternative: One API for Prices, Fundamentals, Positioning and Macro

Nasdaq Data Link, formerly Quandl, is a marketplace: datasets come from many publishers, each with its own schema, license and update schedule. If you want a Quandl alternative that puts US equity prices, SEC fundamentals, CFTC positioning and macro vintages behind one client and one API, this page maps what FinzData covers and what the calls look like.

Get a free API key See pricing Download free samples

What Nasdaq Data Link Is Known For

Nasdaq Data Link is known as a marketplace of datasets from many publishers. That model gives you breadth, but each table arrives with its own column names, update cadence and license terms, so a project that spans equities, positioning and macro ends up reconciling several schemas inside one script.

Its free community WIKI stock prices dataset stopped updating in 2018, which is a common reason people go looking for a Quandl alternative for equity work. For current dataset availability and terms, check their current pricing page.

One Client, Four Data Domains

FinzData is a market-data API and Python client. Install it with pip install finzdata, then import finzdata as yf: the client mirrors yfinance with Ticker, history and download, and every call returns a pandas DataFrame. The REST API at https://api.finzdata.com returns JSON or CSV, with Parquet and bulk files on paid plans.

Prices, fundamentals, positioning and macro all answer to the same client and the same authentication. There is no per-publisher download convention to learn: pick the domain, pass the parameters, get a DataFrame back.

One Client, Four Data Domains in Code

import finzdata as yf

c = yf.Client()

# US equity prices, stored as traded
px = c.prices("AAPL", adjust="all")

# CFTC positioning: weekly since 1986
cot = c.cot(report="disaggregated", market="crude oil")

# SEC fundamentals, point-in-time by filing date
eps = c.fundamentals(ticker="AAPL", concept="EarningsPerShareDiluted",
                    as_of="2021-04-01")

# Macro: the vintage that existed on a past date
gdp = c.macro("GDP", as_of="2020-05-29")

Prices Stored As Traded

Equity coverage runs to 16,000+ US stocks with history starting January 2000, more than 26 years, including delisted names, so backtests are survivorship-free, plus 231 ETFs. Bars come in daily, hourly, 5-minute and 1-minute form, and intraday data uses the same call shape as daily.

Prices are stored as traded. Splits and dividends are published and applied on read, so you choose the adjustment per query with adjust='none', adjust='splits' or adjust='all' instead of maintaining separate raw and adjusted tables. Delisted names are covered in the delisted stocks guide.

Point-in-Time Fundamentals, Positioning and Macro

SEC fundamentals come from XBRL company facts and are point-in-time by filing date, so a simulation sees only what had actually been filed at each date. Financial statements and earnings release dates from 8-K Item 2.02 since 2004 sit in the same client, and the pattern is laid out in the point-in-time backtesting guide. Daily point-in-time valuation, including P/E, P/B, P/S, EV/EBITDA, market cap and dividend yield, starts in 2009. 13F institutional holdings, FINRA short interest since 2017, SEC Form 4 insider trades and nightly dealer gamma (GEX) levels follow the same call pattern.

CFTC Commitments of Traders covers the legacy, disaggregated, financial futures (TFF) and supplemental reports across 950+ futures markets, weekly since 1986, with a COT index (0-100) computed. Macro coverage spans 18,000+ US series with every revision, so you can request the vintage that existed on a past date rather than today's restated series. See COT data, macro data and the COT in Python guide.

DomainClient callHistory
US equity and ETF pricesc.prices(sym, adjust=...)daily, hourly, 5-minute and 1-minute bars since January 2000
CFTC positioningc.cot(report=..., market=...)weekly since 1986, 950+ futures markets
SEC fundamentalsc.fundamentals(ticker=..., concept=..., as_of=...)point-in-time by filing date
Macro vintagesc.macro(id, as_of=...)18,000+ US series with every revision

Migration Example

import finzdata as yf

c = yf.Client()

# Choose the adjustment per query, not per dataset
raw = c.prices("AAPL", adjust="none")
adjusted = c.prices("AAPL", adjust="all")

# Intraday bars down to 1 minute
bars = yf.Ticker("AAPL").history(start="2024-06-03", interval="1m")

# Statements, valuation, short interest, earnings dates
bs = c.statements("AAPL", statement="balance-sheet", freq="Q")
val = c.valuation("AAPL", start="2009-01-01")
si = c.short_interest("AAPL")
ed = c.earnings_dates("AAPL")

Pricing and Free Tier

Most teams evaluating a Quandl alternative start with the free tier: the last 12 months of every dataset, 1,000 API calls per day, and no card. Paid look-back bundles are $195 for the first 5 years and $95 for each further 5 years, plus $19.95 per month for daily updates. Institutional access is $975 once plus $59.95 per month.

Compare plans on the pricing page, read the docs, pull free 10-row samples before writing code, or browse the live charts on explore.

Frequently asked questions

Is FinzData a good Quandl alternative for the old WIKI stock prices?

WIKI was the free community stock prices dataset on Nasdaq Data Link, and it stopped updating in 2018. FinzData's free tier covers the last 12 months of every dataset with 1,000 API calls per day and no card, and paid bundles extend US equity history back to January 2000, including delisted names.

Does FinzData offer intraday data?

Yes. Daily, hourly, 5-minute and 1-minute bars are available for 16,000+ US stocks and 231 ETFs, through the same client used for fundamentals and positioning.

Can I backtest with point-in-time fundamentals?

Yes. XBRL company facts are point-in-time by filing date, so passing as_of means your simulation sees only what had been filed. Daily point-in-time valuation ratios start in 2009, and earnings release dates from 8-K Item 2.02 go back to 2004.

How do I pull COT data in Python?

Call c.cot(report=..., market=...). The legacy, disaggregated, financial futures (TFF) and supplemental reports cover 950+ futures markets weekly since 1986, and a COT index (0-100) is computed for you.

Does the Python client work like yfinance?

Yes. import finzdata as yf gives you Ticker, history and download, and everything returns pandas DataFrames, so most yfinance scripts need only an import change.

How much does FinzData cost?

The free tier includes the last 12 months of every dataset, 1,000 API calls per day, no card. Paid look-back bundles are $195 for the first 5 years and $95 for each further 5 years, plus $19.95 per month for daily updates. Institutional access is $975 once plus $59.95 per month.