Skip to content
/api/v1/tickers/{ticker}/fund-trends

Historical quarterly Form 13F ownership totals and reporter-comparable trading trends.

Historical quarterly Form 13F ownership totals and reporter-comparable trading trends. Current total shares and holder count include every admitted current holdings report, including a manager's first report. Trading changes compare only managers with selected valid holdings reports in both adjacent quarters. Reporter entries, reporter exits, unusable comparisons, registered SPAC-merger discontinuities, and comparison coverage are disclosed separately. Security-successor resolution and split adjustment remain applied.

10 tokensSince v1.3.3

Why use this

Quarterly institutional ownership history for a ticker. Use total_shares and fund_count for the complete admitted current-quarter ownership picture. Use share_change, share_change_pct, fund_flow, fund_change, and position-change counts for trading by managers who reported in both adjacent quarters. A missing security inside that common reporter roster is a real new position or full liquidation; a manager entering or leaving the reporting roster is identified separately and is not called a purchase or sale. There is no include-first-filers switch because first reporters always belong in ownership totals.

Quarterly institutional ownership and trading history for a ticker. Ownership totals include every admitted current Form 13F holdings report. Trading fields use the intersection of selected current and prior holdings-report rosters, after security-successor normalization; within that shared roster an absent security is a provable zero position, so new positions and full liquidations remain counted. Managers present on only one reporting roster are disclosed as reporting entries or reporting exits instead of purchases or sales. Unusable common-reporter groups are disclosed separately, and comparison_status tells clients whether trading fields are complete, partial, unavailable, or legacy-unknown. A registered mergeable SPAC merger inside an adjacent-quarter interval also makes that trading comparison unavailable because converted legacy and sponsor holdings cannot be separated from open-market trades; comparison_event identifies the event while reported ownership totals remain valid. The ownership reconciliation is ownership_change = share_change + reporting_entry_shares - reporting_exit_shares + comparison_unavailable_shares_curr - comparison_unavailable_shares_prev. Share-valued fields are split-adjusted to a common current basis. Use GET /api/v1/tickers/{ticker}/holders for current per-manager detail.

Parameters

NameInRequiredDefaultAllowedDescriptionExample
tickerpathrequiredStock 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. An unresolved ticker returns HTTP 200 with `quarters: []`; for canonical resolution see `/api/v1/cusip-successors`.AAPL
limitqueryoptional20Maximum quarters to return (oldest-first ordering). Reliable 13F coverage starts at 2018-Q3. Defaults to 20 (~5 years of history) and is capped at 100.20

Response schema

FieldTypeNullableDescription
data.tickerstringnoTicker echoed back in canonical hyphen form (e.g. `BRK-A`). Useful for asserting your client passed the ticker you intended after server-side normalization.
data.quartersarraynoArray of quarterly aggregate rows, sorted by `date ASC` (oldest first — chart-friendly ordering). One row per quarter where any 13F filer held the ticker. Empty for an unresolved ticker or one with no summarized 13F holdings.
data.quarters[].datestringnoISO `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.
data.quarters[].fund_countintegernoComplete current-quarter holder count across all admitted current Form 13F holdings reports, including managers first appearing in the reporting roster this quarter.
data.quarters[].fund_count_comparableintegeryesCurrent holders among usable manager-security comparisons where the manager submitted selected holdings reports in both adjacent quarters.
data.quarters[].fund_count_previntegeryesPrior holders inside the same usable common-reporter comparisons used for fund_change.
data.quarters[].fund_count_prev_reportedintegeryesComplete prior-quarter holder count across all admitted prior holdings reports, including managers that did not report in the current quarter.
data.quarters[].total_sharesnumbernoComplete current-quarter admitted ownership, split-adjusted to the most recent split. It includes first-time reporters; it is never filtered down to the trading-comparison cohort.
data.quarters[].total_shares_rawnumbernoAggregate share count in the filing quarter's original share units, before the route applies its cumulative forward split factor.
data.quarters[].total_shares_comparablenumberyesCurrent shares inside usable common-reporter comparisons, split-adjusted to the current basis.
data.quarters[].total_shares_prevnumberyesComparable prior shares used as the denominator for share_change_pct, split-adjusted to the current basis. Zero means a percentage cannot be calculated and can occur when common-reporting managers newly establish the security.
data.quarters[].total_shares_prev_reportednumberyesComplete prior admitted ownership, split-adjusted to the current basis.
data.quarters[].ownership_changenumberyesObserved ownership change: complete current ownership minus complete prior ownership. This can differ from comparable trading because reporter entries, exits, and unavailable comparisons are separate.
data.quarters[].total_valuenumbernoAggregate 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.
data.quarters[].fund_changenumberyesCurrent comparable holders minus prior comparable holders. Null when no usable manager-security comparison exists. A full liquidation by a manager who reported both quarters reduces this value; a manager who stopped reporting is a reporting exit instead.
data.quarters[].share_changenumberyesNet share change from usable common-reporter comparisons only, split-adjusted to the current basis. Null when no comparison exists.
data.quarters[].fund_flownumberyesNet dollar flow from usable common-reporter comparisons only. Null means comparison unavailable; zero means measured no net flow.
data.quarters[].fund_flow_pctnumberyesComparable fund flow divided by current total value. Null when fund flow is unavailable or current total value is zero.
data.quarters[].share_change_pctnumberyesComparable share change divided by comparable prior shares after split adjustment. Null means no usable comparison or a zero comparable prior-share denominator; zero remains a measured 0% change when the denominator is positive. It is independent of the requested history limit.
data.quarters[].reporting_entry_countintegeryesCurrent holders whose manager has a selected current holdings report but no selected prior holdings report. Their shares are in ownership totals and are not classified as purchases.
data.quarters[].reporting_entry_sharesnumberyesShares held by reporting-entry managers, split-adjusted to the current basis.
data.quarters[].reporting_exit_countintegeryesPrior holders whose manager has a selected prior holdings report but no selected current holdings report. Their prior shares are not classified as sales.
data.quarters[].reporting_exit_sharesnumberyesPrior shares held by reporting-exit managers, split-adjusted to the current basis.
data.quarters[].comparison_unavailable_countintegeryesCommon-reporter manager-security groups that cannot be compared because at least one admitted group is unusable or a registered corporate action changed the security's economic basis.
data.quarters[].comparison_unavailable_shares_currnumberyesCurrent admitted shares in unavailable common-reporter comparisons, split-adjusted to the current basis.
data.quarters[].comparison_unavailable_shares_prevnumberyesPrior admitted shares in unavailable common-reporter comparisons, split-adjusted to the current basis.
data.quarters[].comparison_position_countintegeryesUsable manager-security comparisons contributing to trading changes.
data.quarters[].comparison_statusstringyescomplete when all admitted comparison groups are usable, partial when usable and unavailable groups coexist, unavailable when no usable comparison exists, and null on legacy rows not yet rebuilt.
data.quarters[].comparison_eventobjectyesRegistered corporate action that makes this quarter's adjacent-period trading comparison unavailable, or null on an ordinary quarter. The object is `{ type: 'SPAC_MERGER', effective_date: 'YYYY-MM-DD', description: string|null }`. Reported ownership remains valid; share change, fund flow, and buy/sell classifications are unavailable across this boundary.
data.quarters[].new_buys_countintegernoCommon-reporting managers that held no position in the prior report and hold one now.
data.quarters[].closed_countintegernoCommon-reporting managers that held the security in the prior report and omitted it from the current report, representing full liquidations.
data.splitAdjustedbooleanyes`true` when the corporate-actions table contains at least one split event for the ticker; `false` when no split event was found. Omitted on the early empty response for an unresolved ticker or a ticker with no summarized rows.
data.splitsarrayyesSplit events used by the route, each `{ date, ratio }`, ordered by ex-date. Empty when no split event was found; omitted on the early empty response for an unresolved ticker or a ticker with no summarized rows.

Sample response

·
  • "data":
    • "ticker": "AAPL"
    • "security_name": "APPLE INC"
    • "quarters":
    }
}

Errors

StatusLabelDescription
200OKRequest succeeded.
400Bad RequestInvalid query, body, or path parameter.
401UnauthorizedMissing or invalid Authorization header / api_Token.
402Payment RequiredInsufficient token balance for this call. Top up
429Too Many RequestsRate limit exceeded for your tier (see /pricing for tier limits). Tier limits
500Server ErrorUnexpected server-side failure. Retry with backoff; report if persistent.

Code samples

curl "https://api.finradar.ai/api/v1/tickers/AAPL/fund-trends?api_Token=YOUR_API_KEY&limit=20" \
  -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).

Try it

Related endpoints