ETF Fund Flows API: Sourced From SEC N-PORT
Get ETF and mutual fund flow data via API: monthly sales, redemptions, and reinvestment sourced from each fund's own SEC N-PORT filing.

Across the two fiscal quarters ARK Innovation ETF (ARKK) reported ending 2022-01-31 and 2022-04-29, the fund took in a combined $21.22 billion of net new investor money, according to the fund's own SEC filings. Over the same stretch its net assets fell 58.6%, from $21.36 billion to $8.84 billion. Those two facts are not a contradiction. They are the entire reason fund flow data exists as its own disclosure, separate from price: investors kept buying on the way down, and the price move erased more value than the buying added. A chart of ARKK's stock price alone cannot tell you that. Its Form N-PORT flow data can.
This post walks through the StockFit fund flows API: what a flow actually is (sales, redemptions, reinvestment, all filer-reported), why it is a different number than the change in a fund's assets, how to pull it as JSON, and what it looks like across five very different fund types, an index tracker, an active stock-picker, a covered-call income fund, a dividend-growth fund, and a core bond fund, each sourced from its own SEC N-PORT filing rather than a resold feed.
What fund flows reveal that price cannot
A fund's net assets change for exactly two reasons: money moved in or out (a flow), or the securities it already holds went up or down in value (a price return). Looking at total assets alone conflates the two. ARKK's 2022 collapse is the cleanest real-world illustration available: the fund's own reported net asset value fell by more than half in two quarters, which reads, from the outside, like a fund investors were fleeing. The flow data says the opposite happened.
In the quarter ending 2022-01-31, ARKK reported $10.22 billion of net inflows (sales minus redemptions) while net assets fell from $21.36 billion to $12.97 billion. The arithmetic that explains the gap is simple: netAssets(t) = netAssets(t-1) + netFlow(t) + priceEffect(t). Solving for the residual, $18.61 billion of that quarter's asset decline came from the portfolio losing value, not from redemptions. The next quarter repeats the pattern: $11.00 billion of net buying, $15.13 billion of price-driven loss. Investors were net buyers through both of ARKK's worst quarters on record. Whether that turned out to be a good decision is a separate question this data does not answer, and nothing here is investment advice, but the flow direction itself is unambiguous and it is the opposite of what the price chart alone implies.
Sales, redemptions, and reinvestment: reading Form N-PORT's flow data
Every US-registered fund, ETFs and mutual funds alike, files Form N-PORT quarterly, and Item B.6 of that form asks for exactly three monthly figures, one for each month of the quarter: the dollar value of shares sold (new money in, whether through a brokerage purchase or an authorized participant creating shares), the dollar value of shares redeemed (money out), and the dollar value attributable to reinvestment of dividends and capital gains distributions. netFlow = sales + reinvestment - redemptions, and because ETFs create and redeem shares in kind through authorized participants rather than paying cash dividends into new shares the way many mutual funds do, reinvestment is usually zero on an ETF's N-PORT and the formula collapses to sales - redemptions.
N-PORT reporting only exists back to late 2019, so no fund's flow history via this API extends earlier than that regardless of how old the fund itself is, a coverage floor worth knowing before you go looking for 2008-era flow data.
The creation and redemption mechanism, briefly
An ETF's shares are not created or destroyed by an exchange trade between two investors; those trades just move existing shares around. New shares get created, and old ones redeemed, in large blocks (creation units) by authorized participants, institutions that deliver (or receive) a basket of the fund's underlying securities in exchange for new (or existing) ETF shares. That mechanism is what N-PORT's sales and redemption figures are actually measuring at the fund level: how many creation units were built or torn down that month, priced in dollars. It is also why an ETF's reported flow is a real, audited, filer-reported number rather than something a data vendor has to estimate from day-to-day share-count changes scraped off an exchange.
That distinction, primary filing versus a modeled estimate, is the whole reason to care where a fund-flows number comes from. A feed built by tracking daily shares outstanding and multiplying by NAV is a reasonable approximation, but it is still an estimate layered on top of a market data feed. StockFit's /api/fund/flows returns the fund's own reported Item B.6 figures, unmodeled, with the SEC accession number one call away via /api/filings/search-by-accession-number.
The fund flows API, walked through with real JSON
/api/fund/flows takes a ticker (or CIK, CUSIP, FIGI) and returns one entry per reported quarter, most recent first. Here is SPY's most recent quarter, trimmed to the flow fields:
{
"reportDate": "2026-06-30",
"flowSalesMon1": 121393713302.6,
"flowRedemptionMon1": 106822374029.05,
"flowSalesMon2": 113494270849.2,
"flowRedemptionMon2": 103589923878.65,
"flowSalesMon3": 168709868513.65,
"flowRedemptionMon3": 161982960949.05,
"netAssets": 781188872107,
"totalAssets": 783339902050
}Summing the three monthly sales figures gives $403.60 billion, and summing redemptions gives $372.40 billion. Both totals match /api/fund/profile's totalSales and totalRedemptions fields for the same fund and quarter exactly, to the cent, two independent endpoints reading the same underlying N-PORT filing (accession 0001410368-26-089410). Net flow for the quarter is sales minus redemptions: $31.20 billion.
That $31.2 billion net number is worth sitting with for a second, because gross sales and redemptions combined came to $776.0 billion that quarter, more than 24 times the net figure. Most of SPY's creation and redemption activity is authorized participants arbitraging the fund's price against its NAV and rolling exposure, not directional investor demand. Net flow is the number that isolates the demand signal; gross activity mostly cancels itself out. A feed that only reports one gross number, or nets sales against redemptions incorrectly, will not match this.
Computing net flow yourself
const resp = await fetch(
`https://api.stockfit.io/v1/api/fund/flows?symbol=${symbol}`,
{ headers: { Authorization: `Bearer ${token}` } }
);
const quarters = await resp.json();
const withNetFlow = quarters.map(q => ({
reportDate: q.reportDate,
netFlow:
(q.flowSalesMon1 ?? 0) + (q.flowSalesMon2 ?? 0) + (q.flowSalesMon3 ?? 0) +
(q.flowReinvestMon1 ?? 0) + (q.flowReinvestMon2 ?? 0) + (q.flowReinvestMon3 ?? 0) -
(q.flowRedemptionMon1 ?? 0) - (q.flowRedemptionMon2 ?? 0) - (q.flowRedemptionMon3 ?? 0),
netAssets: q.netAssets,
flowToAum: null as number | null,
}));
for (const row of withNetFlow) {
row.flowToAum = row.netAssets > 0 ? row.netFlow / row.netAssets : null;
}Or skip the arithmetic: /api/fund/chart/flows returns this exact computation pre-built and chart-ready, covered in the next section.
Net flows vs. AUM change: why they are not the same number
A vendor that only tracks total assets under management and reports the quarter-over-quarter change as "flow" is reporting a different, less accurate number, one that bundles in every dollar of market movement. The gap is small for a low-volatility fund over a short window and enormous for a volatile one over a rough quarter, exactly ARKK's case above. The reverse trap is just as real: a fund can show rising assets on pure price appreciation while actually bleeding net redemptions, the AUM-only view would call that growth.
This is also where the quarter-over-quarter diffing pattern used elsewhere in this API family shows up again: N-PORT is a discrete quarterly snapshot, so any flow figure is a comparison between two point-in-time filings, not a running daily ledger. For a fund's current, as-of-today book of positions rather than its flow history, pair this endpoint with daily ETF holdings, sourced straight from the issuer rather than the quarterly SEC filing.
Comparing flow-to-AUM across five fund types
Raw dollar flows are not comparable across funds of wildly different sizes; a billion-dollar quarter is enormous for JEPI and a rounding error for SPY. Flow-to-AUM (net flow divided by that quarter's ending net assets) normalizes for size and makes the shape of each fund type's flow behavior visible.
The dispersion by category is the point. SPY, a fully mature $780 billion index fund, mostly moves within a single-digit percent of AUM per quarter in either direction, noisy but bounded. ARKK swings from -14% to +124% of its own ending AUM in a single quarter, the mechanical consequence of a much smaller, much more volatile asset base where the same dollar flow is a larger fraction of a shrinking or growing denominator. JEPI, launched mid-2020, shows a flow-to-AUM ratio well above 50% in its first few quarters (any fund is mostly "flow" right after inception, before a large asset base exists to divide by) that steadily decays toward single digits as it matures, and has landed on the positive side of zero in every one of its 25 reported quarters from 2020-06-30 through 2026-06-30, a streak long enough that it is more likely to be about JEPI's covered-call income category than any one quarter's market conditions. AGG (core bonds) and SCHD (dividend growth) sit in between, occasionally dipping negative but mostly compounding in the single digits, the shape of a fund attracting steady, unglamorous, buy-and-hold demand.
Charting fund flows with the chart endpoint
Every chart in this post is built from /api/fund/chart/flows, which returns periods sorted ascending plus two ready-to-plot payloads: an absolute-value series array (Net Flows, Net Assets, both in dollars) and a normalized rates array (Flow-to-AUM as a decimal). No client-side math required for the common case:
{
"periods": ["2025-12-31", "2026-03-31", "2026-06-30"],
"series": [
{ "name": "Net Flows", "data": [23766322053.9, -29392457927.55, 31202593808.7] },
{ "name": "Net Assets", "data": [712072540255, 651588269948, 781188872107] }
],
"rates": [
{ "name": "Flow-to-AUM", "data": [0.0334, -0.0451, 0.0399] }
]
}This is real SPY output, not a hand-typed example. Feed periods and a rates series directly into a charting library's x/y arrays and the institutional fund flow tracking view above is most of the way built. Pull the same call for any two funds you want to compare, an active manager against its category's passive benchmark is the most common request, and read rotation directly off the chart: when a sector or style ETF's flow-to-AUM turns sharply positive while a broad index fund's stays flat, that is crowding into a narrower trade, visible months before it would show up as a change in any lagging price-based signal.
The same quarterly-reporting lag that applies everywhere in the SEC's institutional disclosure regime applies here too: a quarter's N-PORT typically becomes public 30 to 60 days after the quarter ends, so the most recent quarter on this chart is always a few weeks old by the time it is filed. That lag is a structural fact of the filing, not something any vendor can shorten, ours included.
and pull flow history for any fund in StockFit's ETF and mutual fund data coverage, all sourced the same way: straight from the filer's own Form N-PORT, never a resold feed.FAQ
Q.What is a fund flow and how is it different from a return?
netAssets(t) = netAssets(t-1) + netFlow(t) + priceEffect(t). Confusing the two, treating a change in total assets as if it were entirely flow, is the single most common mistake in reading fund-level data.Q.How do I get ETF fund flow data via API?
Q.What is the difference between gross flows and net flows for an ETF?
Q.Why don't fund flows always match the change in a fund's total assets?
Q.How often is ETF fund flow data updated?
Q.Does StockFit's fund flows data include mutual funds, or just ETFs?
flowReinvestMon figure, since some offer dividend reinvestment directly rather than through the in-kind creation and redemption mechanism ETFs use.Q.What is the ETF creation and redemption mechanism?
Q.Can I chart fund flows without computing net flow myself?
periods, an absolute-value series (Net Flows and Net Assets), and a normalized rates series (Flow-to-AUM) in one call, sorted ascending, built for a charting library to consume directly.Q.Which StockFit plan includes fund flows data?
Ready to build?
Free API key, no credit card.