All Posts
AnalysisETF Fund Flows APISEC N-PORT DataFund Flow Analysis

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.

Published September 11, 202612 min readStockFit Engineering
ETF Fund Flows API: Sourced From SEC N-PORT

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.

ARKK net inflow
$21.22B
Q1 2022 + Q2 2022 combined
ARKK AUM change
-58.6%
same window, price-driven
JEPI flow streak
25/25
quarters with net inflows since inception
N-PORT flow history
2019 to now
every fund, quarterly, filer-reported

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.

ARKK: net flow vs net assets, 2020 to 2026
Orange columns mark 2022-01-31 and 2022-04-29: net inflows both quarters while net assets fell 58.6% ($21.36B to $8.84B), a price effect, not a flow effect.

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:

json
{
  "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

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

Flow-to-AUM by fund category, full N-PORT history
Net quarterly flow (sales minus redemptions) as a share of that quarter's ending net assets. SPY, ARKK, JEPI, SCHD, AGG, from each fund's own inception or N-PORT's 2019 start.

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:

json
{
  "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?
A fund flow is money moving into or out of a fund through share creation and redemption, reported by the fund itself. A return is the price change of what the fund already holds. The two combine to produce the change in total assets: 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?
Call /api/fund/flows with a ticker, CIK, CUSIP, or FIGI for the raw monthly sales, redemption, and reinvestment figures per quarter, or /api/fund/chart/flows for the same data pre-computed into net flow, net assets, and a flow-to-AUM ratio, sorted ascending and ready to chart.
Q.What is the difference between gross flows and net flows for an ETF?
Gross flows are the total dollar value of shares sold plus shares redeemed, all creation and redemption activity regardless of direction. Net flow is sales minus redemptions (plus reinvestment), the actual change in investor money. For SPY's 2026-06-30 quarter, gross activity was $776.0 billion against a net flow of $31.2 billion, about 4% of gross, because most authorized-participant creation and redemption activity offsets itself rather than reflecting new directional demand.
Q.Why don't fund flows always match the change in a fund's total assets?
Because total assets also move with the price of the fund's holdings. ARKK is the clearest example: in the quarter ending 2022-01-31 the fund took in a net $10.22 billion while its assets fell from $21.36 billion to $12.97 billion, meaning roughly $18.61 billion of that decline was the portfolio losing value, not investors leaving. Net flow and AUM change are related but genuinely different numbers.
Q.How often is ETF fund flow data updated?
As often as the SEC receives a new Form N-PORT for that fund: quarterly, with typically a 30 to 60 day filing lag after each quarter closes. This is not a daily feed. For a fund's current holdings rather than its historical flow pattern, see daily ETF holdings, sourced from the issuer directly.
Q.Does StockFit's fund flows data include mutual funds, or just ETFs?
Both. Form N-PORT is filed by ETFs and open-end mutual funds alike, and /api/fund/flows covers either, resolved by ticker, CIK, CUSIP, or FIGI the same way. Mutual funds are more likely than ETFs to show a nonzero 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?
The process by which ETF shares actually come into and out of existence: an authorized participant (a large institutional broker-dealer) delivers a basket of the fund's underlying securities to the fund in exchange for a block of new ETF shares (creation), or delivers ETF shares back to the fund in exchange for the underlying basket (redemption). Ordinary secondary-market trades between investors do not touch this mechanism at all; only creation and redemption activity is what Form N-PORT's sales and redemption figures measure.
Q.Can I chart fund flows without computing net flow myself?
Yes. /api/fund/chart/flows returns 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?
/api/fund/flows and /api/fund/chart/flows both require the ETF plan ($59/mo, $39/mo billed annually) or Professional ($99/mo, $69/mo billed annually). /api/fund/profile, used in this post for the cross-check against quarterly totals, is available from the Free tier up.

Ready to build?

Free API key, no credit card.