---
title: "Fund data providers compared for developers (2026): Morningstar, Bloomberg, Refinitiv, market-data APIs and ISIN-first APIs"
description: "A criteria-based comparison of fund and ETF data sources for developers: enterprise platforms, market-data APIs, issuer documents and ISIN-first APIs."
canonical: https://fundfactsapi.com/blog/fund-data-providers-for-developers-2026
published: 2026-09-22
updated: 2026-09-22
publisher: FundFacts API
---

# Fund data providers compared for developers (2026): Morningstar, Bloomberg, Refinitiv, market-data APIs and ISIN-first APIs

> A criteria-based comparison of fund and ETF data sources for developers: enterprise platforms, market-data APIs, issuer documents and ISIN-first APIs.

There are four ways to get fund and ETF data into an application: license an enterprise platform (Morningstar, Bloomberg, LSEG's Refinitiv and Lipper), use a stock-market data API and accept that it knows ETFs mostly as tickers with prices, read each fund's own published documents yourself, or call an ISIN-first fund data API that has already done the reading. Which one fits depends on six criteria: what data you need (prices versus factsheet content), coverage, freshness, how you identify funds, how you are allowed to use the data, and how the pricing scales. This post walks through those criteria without quoting competitor prices, because enterprise contracts are negotiated and anything printed here would be wrong for you.

> **In short** Enterprise platforms have the broadest coverage and analytics, are licensed per seat or per use case, and integrate through proprietary APIs and files. Stock-market APIs are cheap and real-time but are built around tickers and prices, not fund fees, holdings or KIDs. Reading issuer documents yourself is free and complete but is a parsing project that never ends. ISIN-first APIs return the factsheet as JSON from the fund's own documents, on self-serve pricing, with coverage limited to the issuers they know. Pick by data type first, then by identifier and licence.

## Criterion 1: which data do you actually need?

"Fund data" hides two different datasets.

**Market data** is what trades: the price of an ETF share on an exchange, bid and ask, volume, intraday and historical. It exists only for listed products and varies by listing. It is the domain of exchanges and market-data vendors.

**Factsheet data** is what the fund discloses: fees, the risk indicator, holdings and exposures, NAV history and NAV-based returns, fund size, objective, benchmark, SFDR classification, and the identity of the share class. It exists for every fund, listed or not, and is published by the fund house in the factsheet, the PRIIPs KID, the prospectus and holdings and NAV files. The [factsheet walkthrough](https://fundfactsapi.com/blog/how-to-read-a-fund-factsheet) lists the blocks.

Most product features people build (screeners, comparison pages, portfolio look-through, client reporting, compliance checks, AI assistants) need factsheet data; a trading screen needs market data. The [NAV vs market price post](https://fundfactsapi.com/blog/etf-nav-vs-market-price-premium-discount) explains why the two should not be mixed in one series. Decide which you need before comparing providers, because the categories below are strong in one and weak in the other.

## Criterion 2: coverage and identifiers

Coverage has two dimensions: which funds, and which fields per fund. Enterprise platforms cover the largest number of funds worldwide, including many that publish little. Market-data APIs cover what is listed. Document-based approaches cover exactly the issuers whose documents they can read, but for those they return the full factsheet.

The identifier matters as much as the count. Funds are identified by ISIN per share class; tickers exist only for ETFs and differ per exchange. A provider whose primary key is the ticker will represent an ETF several times and a non-listed UCITS fund not at all. The [identifiers post](https://fundfactsapi.com/blog/isin-vs-ticker-vs-sedol-vs-wkn-vs-cusip) explains why ISIN is the right key, and the [ISIN glossary entry](https://fundfactsapi.com/glossary/isin) has the format. Ask any provider: "can I look up a fund by ISIN, and does each share class come back separately?"

## Criterion 3: freshness

Factsheet data changes on a daily-to-yearly cadence: NAV daily, holdings monthly or daily depending on the issuer, fees and the risk indicator from the KID a few times a year at most. A provider that refreshes daily is as fresh as the source. Intraday refresh only matters for market prices. The relevant questions are whether the provider gives you an as-of date per figure and whether it tells you when a tracked field changed. The [freshness post](https://fundfactsapi.com/blog/how-fresh-is-fund-data-as-of-dates) goes through this in detail.

## Criterion 4: licence and redistribution

This is where enterprise platforms and self-serve APIs differ most. Enterprise data licences typically distinguish internal use, display to clients, and redistribution, and price them differently; they also often restrict derived data. Read the terms before designing a product that shows the data to end users. Self-serve APIs state commercial-use rules per plan; document-based approaches inherit the terms of each issuer's site. Whichever route you take, budget legal time proportional to how public your use is.

## Criterion 5: integration effort

Enterprise platforms integrate through their own SDKs, file deliveries, or terminal-bound APIs, and often expect a data team to manage the feed. Market-data APIs are simple REST. Reading documents yourself is a crawler, a PDF parser, a table extractor and a normaliser per issuer, plus monitoring for layout changes; the [factsheet automation post](https://fundfactsapi.com/blog/fund-factsheet-automation) and the [build-your-own comparison](https://fundfactsapi.com/compare/fundfacts-api-vs-building-your-own-factsheet-parser) describe that project honestly. ISIN-first APIs are one REST call with a JSON schema, usually with an OpenAPI spec and SDKs.

## Criterion 6: pricing model

Three models exist: annual contracts priced per seat, per use case or per data set (enterprise); monthly subscriptions with request quotas (market-data APIs, ISIN-first APIs); and your own engineering time (do it yourself). Contracts scale with your organisation; quotas scale with usage; engineering time scales with the number of issuers and document formats you support. Enterprise prices are not published and vary by deal, so a comparison table with numbers in it is fiction. What can be compared is the shape: fixed annual commitment versus pay-as-you-grow.

## The comparison

| Criterion | Enterprise platforms (Morningstar, Bloomberg, LSEG Refinitiv/Lipper) | Stock-market data APIs | Read issuer documents yourself | ISIN-first fund data API (FundFacts) |
| --- | --- | --- | --- | --- |
| Data type | Factsheet data, market data, analytics, ratings, research | Market data; limited fund fundamentals for ETFs | Factsheet data | Factsheet data: key facts, fees, risk, holdings, exposures, NAV-based performance and statistics |
| Fund coverage | Broadest, global | Listed ETFs only, by ticker | Any issuer you write a parser for | Issuers the pipeline knows; the [coverage page](https://fundfactsapi.com/coverage) lists them per section |
| Identifier | ISIN, ticker, proprietary ids | Ticker per exchange | ISIN (from the documents) | ISIN per share class; search by name |
| Freshness | Daily or better, contractually defined | Real-time prices | Whatever you crawl | 24-hour store; `dataAsOf` per payload; change feed on Scale |
| Non-listed UCITS funds | Yes | Generally no | Yes | Yes |
| French SCPIs | Varies | No | Yes, if you parse bulletins | Yes, `GET /api/v1/scpi` |
| Integration | Proprietary SDKs, files, terminal APIs | REST | Your own pipeline | REST, OpenAPI 3.1, JS and Python SDKs, MCP server |
| Licence | Negotiated; internal, display and redistribution priced separately | Per plan | Per issuer's site terms | Per plan; commercial use from Pro |
| Pricing shape | Annual contract | Monthly quota | Engineering time | Monthly requests: Free 5, Starter $9.99 / 60, Pro $49 / 1,000, Scale $249 / 10,000; Enterprise $0.01 per request |
| Best for | Institutions needing global coverage, ratings and research in one contract | Trading and charting apps | Teams with a narrow issuer list and a data engineer | Product teams and developers who need the factsheet as JSON without a contract |

The per-provider pages ([Morningstar](https://fundfactsapi.com/compare/fundfacts-api-vs-morningstar), [Bloomberg](https://fundfactsapi.com/compare/fundfacts-api-vs-bloomberg), [LSEG Refinitiv and Lipper](https://fundfactsapi.com/compare/fundfacts-api-vs-lseg-refinitiv-lipper), [stock-market APIs](https://fundfactsapi.com/compare/fundfacts-api-vs-stock-market-data-apis)) go into where each is the better choice.

## When the enterprise platform is the right answer

Be honest about this. If you need ratings, analyst research, global coverage including funds that publish almost nothing, point-in-time databases for backtesting, or a vendor relationship your compliance team already knows, an enterprise platform is the right tool and the contract is the price of that breadth. The same goes for institutions whose users already sit in front of a terminal. An ISIN-first API does not replace those; it replaces the part of the workflow where a developer wants the factsheet of a fund as JSON, today, with a key they created themselves.

## When a market-data API is the right answer

If the product is a chart of an ETF's price, or an alert on a price level, a market-data API is the natural fit and a fund data API is the wrong tool: there is no market price in a factsheet. Many products end up using both, one for the price line and one for the fees, holdings and risk blocks, keyed by ISIN on one side and by ticker and exchange on the other.

## What an ISIN-first API looks like in practice

The shape is one request per share class, one JSON document out:

```typescript
const res = await fetch("https://fundfactsapi.com/api/v1/funds/IE00B4L5Y983", {
  headers: { Authorization: "Bearer ffk_live_..." },
  signal: AbortSignal.timeout(300_000), // first-ever load of a fund can take one to three minutes
});
const { name, cached, data } = await res.json();

console.log(name, cached);                         // "iShares Core MSCI World UCITS ETF USD (Acc)", true
console.log(data.headlineMetrics.ter);             // "0.20%"
console.log(data.riskRating, data.profile.category); // 6, "Global Blend Equity"
console.log(data.topHoldings.length, data.sector[0]); // holdings count, { label, weight }
console.log(data.annualisedReturns);               // [{ label: "1 Year", fund, index }, …]
console.log(data.dataAsOf);                        // date the figures refer to
```

Around that single call sit the batch endpoint (`POST /api/v1/funds`), name search, portfolio look-through, holdings overlap, a change feed and NDJSON export on Scale, a document extraction endpoint for funds outside the covered issuers, and an [MCP server](https://fundfactsapi.com/blog/fund-data-mcp-server-claude-chatgpt-cursor) so AI assistants use the same data. Every figure is read from the fund's own published documents (product page, factsheet, KID, holdings and NAV files), which is also the provenance answer when a compliance reviewer asks where a number came from.

The limits are equally concrete: coverage is bounded by the issuers the pipeline knows (check the [coverage page](https://fundfactsapi.com/coverage) before committing), there is no market price, the first load of an unknown fund takes minutes rather than milliseconds, and the derived `profile` labels are rule-based rather than analyst-assigned. If those are acceptable, the [pricing](https://fundfactsapi.com/pricing) is self-serve and a [free key](https://fundfactsapi.com/signup) is enough to test coverage on your own fund list before paying anything.

## A decision checklist

1. Do you need prices or factsheet content? Prices: market-data API. Content: continue.
2. Do you need ratings, research or funds outside the mainstream European and US issuers? Yes: enterprise platform.
3. Is your fund list mostly UCITS ETFs and funds from the major issuers, identified by ISIN? Yes: test an ISIN-first API against your list.
4. Do you have a narrow issuer list and an engineer with time? Consider reading the documents yourself, and read the [parser comparison](https://fundfactsapi.com/compare/fundfacts-api-vs-building-your-own-factsheet-parser) first.
5. Will end users see the data? Check redistribution terms on any option before building.

## FAQ

### Is there a cheaper alternative to Morningstar or Bloomberg for fund data?

For factsheet-type data (fees, risk indicator, holdings, exposures, NAV-based performance) on mainstream European and US funds, ISIN-first APIs on self-serve monthly plans exist, FundFacts among them. They do not replace the ratings, research, global long-tail coverage and analytics of an enterprise platform; they replace the step of turning a fund's documents into JSON.

### Can I get mutual fund data from a stock market API?

Usually only for ETFs, and mostly prices. Stock-market APIs are keyed by ticker and exchange, so non-listed funds are absent and ETF fundamentals such as KID costs, holdings and the risk indicator are limited or missing. Use them for the price line and a fund data source for the factsheet blocks.

### What should I check before choosing a fund data provider?

Whether it returns factsheet data or market data; whether it keys on ISIN per share class; how it reports the as-of date; which issuers it covers against your actual fund list; what the licence allows for display and redistribution; and whether pricing is a contract or a usage quota.

### How does FundFacts get its data?

From the fund's own published documents: the product page, the factsheet, the PRIIPs KID, and the holdings and NAV files the issuer publishes. Payloads are refreshed every 24 hours and carry the date the figures refer to.

## About FundFacts API

FundFacts turns any fund or ETF ISIN into one dated factsheet (fees and KID costs, the 1–7 risk indicator, holdings, sector and country exposure, returns) read from the fund house's own documents: as a client-ready PDF under your firm's name for advisers and wealth managers, as JSON through its API for developers, or inside ChatGPT and Claude through its MCP server.

FundFacts works inside ChatGPT and Claude as a connector (a remote MCP server): ask about any fund or ETF by ISIN, ticker or name and the assistant answers from FundFacts' dated figures, fees, risk, holdings, exposure and returns, with fund cards, side-by-side comparisons, holdings overlap and portfolio look-through.

- Free API key, no card: https://fundfactsapi.com/signup
- Documentation: https://fundfactsapi.com/docs (OpenAPI: https://fundfactsapi.com/openapi.json)
- MCP server: https://fundfactsapi.com/api/mcp (set-up for every client: https://fundfactsapi.com/mcp-server)
- Pricing: https://fundfactsapi.com/pricing
- Site index for AI assistants: https://fundfactsapi.com/llms.txt
- Informational data, not investment advice.
