/api/v1/tickers/{ticker}/fund-trendsHistorical quarterly fund ownership trends aggregated from ALL 9,600+ 13F filers (form_13f_holdings).
Historical quarterly fund ownership trends aggregated from ALL 9,600+ 13F filers (form_13f_holdings). CUSIP successor chain expansion and amendment deduplication included. Split-adjusted share counts. Returns per-quarter totals for shares, value, fund count, and computed deltas (fund flow, share change %).
Why use this
Quarterly time-series of institutional fund ownership for a ticker — drives the "Fund Ownership" chart on company-overview pages. Queries ALL 9,600+ 13F filers (not the legacy 668-fund subset; rewritten in v3.3.0). Includes CUSIP successor-chain expansion so M&A continuity is preserved (e.g. PFE/Wyeth, T/Time Warner). Split-adjusted share counts. Use GET /api/v1/tickers/{ticker}/holders for the current-quarter holder list at the same level of completeness.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| ticker | path | required | — | — | Stock ticker (case-insensitive). Server normalizes to canonical hyphen form (`BRK.A`/`BRK/A`/`BRKA` → `BRK-A`). Multi-class issuers preserve the requested class — `GOOGL` and `GOOG` return distinct trends. Returns 404 if the ticker has been delisted with no successor in our chain table; for canonical resolution see `/api/v1/cusip-successors`. | AAPL |
| limit | query | optional | 20 | — | Maximum quarters to return (oldest-first ordering; FinRadar coverage starts 2013-Q1). Defaults to 20 (~5 years of history). Capped at 40 (~10 years). For full history beyond 10 years use `POST /api/v1/form-13f/holdings` with date-range chunking. | 20 |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| ticker | string | no | Ticker echoed back in canonical hyphen form (e.g. `BRK-A`). Useful for asserting your client passed the ticker you intended after server-side normalization. |
| trends | array | no | Array of quarterly aggregate rows, sorted by `period ASC` (oldest first — chart-friendly ordering). One row per quarter where ANY 13F filer held the ticker. Empty array for tickers no fund has ever held (most pre-IPO and very-thinly-held names). |
| trends[].period | string | no | ISO `YYYY-MM-DD` quarter-end date (always 03-31 / 06-30 / 09-30 / 12-31). The 13F filing for this period was due 45 days later. Most-recent quarter may be partially populated during the 45-day filing window — see `/form-13f/filing-progress` for completeness gauge. |
| trends[].fund_count | integer | no | Number of distinct 13F filers holding the ticker as of `period`. Counts unique CIKs (one per fund family) — Fidelity, Vanguard, BlackRock are 1 each despite running thousands of underlying funds. Mega-cap names typically have 3000-5000 filers; small-caps 50-300; micro-caps 1-30. |
| trends[].total_shares | number | no | Aggregate share count across all funds holding the ticker, SPLIT-ADJUSTED to most recent split via Sharadar's split-adjustment factor. So a pre-2020 4-for-1 AAPL split is normalized to current-shares basis, making cross-quarter trends visually clean. For as-filed (un-adjusted) shares use `POST /api/v1/form-13f/holdings`. |
| trends[].total_value_usd | number | no | Aggregate position USD value across all funds, post-Plan 51 holdings-quality correction (handles the thousands-vs-actual-dollars reporting issue). NOT mark-to-most-recent-price — uses the value as filed for that quarter (which is mark-to-quarter-end-price). For the price-adjusted view across quarters, multiply `total_shares` by your reference price. |
| trends[].fund_change_pct | number | yes | Quarter-over-quarter percent change in `fund_count`, using FAIR-COMPARISON logic (post-v3.9.0 fix): `fund_count_prev` only counts funds that filed in BOTH quarters, so the metric correctly captures incremental adoption rather than being polluted by funds that simply skipped a quarterly filing. Null on the first row (no prior baseline). |
| trends[].shares_change_pct | number | yes | Quarter-over-quarter percent change in `total_shares`, computed on split-adjusted shares so corporate actions don't manufacture artificial spikes. Positive = aggregate fund flow IN; negative = aggregate fund flow OUT. Null on the first row (no prior baseline). |
Sample response
- "data":
- "ticker": "AAPL"
- "security_name": "APPLE INC"
- "quarters":
Errors
| Status | Label | Description |
|---|---|---|
| 200 | OK | Request succeeded. |
| 400 | Bad Request | Invalid query, body, or path parameter. |
| 401 | Unauthorized | Missing or invalid Authorization header / api_Token. |
| 402 | Payment Required | Insufficient token balance for this call. Top up |
| 429 | Too Many Requests | Rate limit exceeded for your tier (see /pricing for tier limits). Tier limits |
| 500 | Server Error | Unexpected server-side failure. Retry with backoff; report if persistent. |
Code samples
curl "https://api.finradar.ai/api/v1/tickers/{ticker}/fund-trends?api_Token=YOUR_API_KEY" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"Generate an API key in /account/credentials to run live queries (literal YOUR_API_KEY placeholder shown until then).