---
title: "How do I bulk-export fund data for a whole universe?"
description: "GET /api/v1/export streams every stored fund matching issuer, asset class, currency or since-date filters as NDJSON (optionally gzipped) in one request on the Scale plan. Loading a universe first, and the batch alternative on Pro."
canonical: https://fundfactsapi.com/answers/how-to-bulk-export-fund-data
published: 2026-09-12
updated: 2026-10-13
publisher: FundFacts API
---

# How do I bulk-export fund data for a whole universe?

**Short answer:** On the Scale plan, GET https://fundfactsapi.com/api/v1/export?issuer=&assetClass=&currency=&since=&gzip=1 streams every fund in the store that matches the filters as NDJSON, one full payload per line, for one request. The store contains funds that have been loaded, so seed your universe first with batch calls (POST /funds, 200 ISINs per call on Scale). On Pro, the same result is a loop of batch calls of 50 with the payloads written to your own database.

## Export on Scale

```bash
curl -s "https://fundfactsapi.com/api/v1/export?issuer=ishares&assetClass=Equities&gzip=1" -H "Authorization: Bearer $FUNDFACTS_API_KEY" \
  | gunzip | head -n 2 | jq '{isin, name, ter: .data.headlineMetrics.ter}'
```

Filters: `issuer`, `assetClass`, `currency`, `since` (payloads generated after this date). Each line is the same envelope as `GET /funds/{isin}`. One request per call regardless of size.

## Seeding the universe

The export returns what is in the store. To cover a universe:

1. Build the ISIN list (your own, or from the [coverage pages](https://fundfactsapi.com/coverage) and `GET /search`).
2. Load it with `POST /funds` in batches of the plan size with `wait: true`; re-send `pending` entries after a minute.
3. Repeat daily for the ISINs whose `expiresAt` has passed; on Scale, or Pro with overage, that is one request per ISIN per day.

## On Pro

```python
import os, requests, json, time
H = {"Authorization": f"Bearer {os.environ['FUNDFACTS_API_KEY']}"}
isins = [l.strip() for l in open("universe.txt") if l.strip()]
with open("funds.ndjson", "a") as out:
    for i in range(0, len(isins), 50):
        r = requests.post("https://fundfactsapi.com/api/v1/funds", json={"isins": isins[i:i+50], "wait": True}, headers=H, timeout=300).json()
        for x in r["results"]:
            if x["status"] == "ok":
                out.write(json.dumps(x) + "\n")
            elif x["status"] == "pending":
                isins.append(x["isin"])  # try again at the end
        time.sleep(1)
```

## Keeping it current

Pair the export with the [change feed](https://fundfactsapi.com/answers/how-to-monitor-fund-changes-ter-holdings-risk) to update only the funds whose tracked fields moved, rather than re-exporting everything. The [quant research use case](https://fundfactsapi.com/use-cases/quant-research) covers the analysis side.

## FAQ

### Is there a full dump of every fund you have?

The export is per account and returns the funds in the store matching your filters; there is no separate static dataset. Enterprise customers with universe-scale needs get metered pricing and a named contact.

## 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.
