Skip to content
/api/v1/form-13f/aggregation/by-sector

Institutional ownership aggregated by sector and industry.

Institutional ownership aggregated by sector and industry. Current values include all admitted current reporters; flow, significance, momentum, comparisons, and top movers use reporter-comparable activity and carry complete, partial, unavailable, or legacy-unknown coverage.

free

Why use this

Sector and industry ownership rollups with comparable trading activity. A null flow means no usable comparison, while numeric zero means measured no net flow. Ranked industry lists and top movers omit unavailable activity unless the full industry list is explicitly requested.

Common use case

Building a sector rotation dashboard showing where institutional money is flowing. Drill from 'Technology is seeing Strong Buying' to 'Semiconductors is the driver' to 'NVDA, AMD, AVGO are the top movers'. Use ?compare=prev to highlight momentum shifts between quarters.

Sector-first rollup of current institutional ownership and reporter-comparable trading activity. Current total value and breadth continue to include all admitted current reporters. Flow, flow significance, momentum, previous-quarter flow changes, and mover rankings use the common adjacent-quarter reporter cohort. Every sector, nested industry, and top mover carries comparison coverage; unavailable activity remains null rather than becoming zero. Default rankings omit unavailable flows, while industry_limit=all appends unavailable industries after known values. Filing-season metadata, classifications, enrichment, and ownership totals remain unchanged.

Parameters

NameInRequiredDefaultAllowedDescriptionExample
quarterqueryoptionalReport period YYYY-MM-DD (e.g. 2025-12-31). Defaults to latest available quarter.2025Q4
comparequeryoptionalSet to 'prev' to include quarter-over-quarter deltas per sector: flow_change, momentum_shift, fund_count_change, value_change_pct.false
industry_limitqueryoptional15Max industries per direction (inflows + outflows) per sector. Use 'all' for full breakdown. Range: 1-100.
sortqueryoptionalfund_flow'fund_flow' (absolute $) or 'significance' (flow_significance_pct). Applies to both sector and industry ordering.filed_at

Response schema

FieldTypeNullableDescription
statusstringnosuccess on a successful standard API response; data contains quarter, total_sectors, sectors, and quarter_metadata.
data.quarterstringnoISO `YYYY-MM-DD` reporting quarter (always a calendar quarter end). Echoed from the request; defaults to the latest available quarter.
data.total_sectorsintegernoNumber of sector rows returned for the quarter.
data.sectorsarraynoPer-sector aggregation rows from `sec_13f_sector_summary`. Sorted by `sort` parameter (default: `fund_flow DESC`). Each sector carries top-N industries (per `industry_limit`) with their top-5 movers — drill-down structure suitable for a 3-level navigation UI (sector → industry → ticker).
data.sectors[].sectorstringnoSector classification (e.g. `Technology`, `Healthcare`, `Financial Services`, `Energy`, `Utilities`, `Consumer Cyclical`, `Consumer Defensive`, `Industrials`, `Basic Materials`, `Communication Services`, `Real Estate`).
data.sectors[].fund_flownumberyesComparable net dollar flow for the sector. Null means no usable comparison; zero means measured no net flow.
data.sectors[].comparison_position_countintegeryesUsable manager-security comparisons rolled into the sector.
data.sectors[].comparison_unavailable_countintegeryesUnavailable manager-security comparisons rolled into the sector.
data.sectors[].comparison_statusstringyescomplete, partial, unavailable, or null for legacy unknown coverage.
data.sectors[].total_valuenumbernoTotal institutional position value in this sector this quarter, in USD. Sum of `value_usd` across all positions held by tracked funds in this sector.
data.sectors[].unique_fund_countintegernoNumber of distinct current funds represented in the sector rollup.
data.sectors[].etf_valuenumbernoSub-aggregate of `total_value` that comes from ETF positions (`security_group=ETFs`). Useful for distinguishing active sector bets (high non-ETF value) from passive index exposure (high ETF value). Computed as `total_value - sum(non-etf positions)`.
data.sectors[].flow_significance_pctnumberyesComparable fund flow divided by current total value. Null when comparable flow is unavailable or total value is zero.
data.sectors[].momentum_labelstringyesMomentum label derived from comparable flow significance. Null when comparable activity is unavailable.
data.sectors[].low_confidencebooleannoLow-confidence data-quality flag from the existing sector coverage rules.
data.sectors[].industriesarraynoRanked industry rows for the sector. Each row carries fund_flow, total_value, cusip_count, comparison coverage, and top_movers. Unavailable flows are omitted from the default ranked subset and included after known rows only when industry_limit=all.
data.sectors[].industries[]objectnoIndustry row in data.sectors[].industries. fund_flow and derived significance or momentum are nullable when comparison is unavailable.
data.sectors[].industries[].comparison_position_countintegeryesUsable manager-security comparisons rolled into the industry.
data.sectors[].industries[].comparison_unavailable_countintegeryesUnavailable comparisons rolled into the industry.
data.sectors[].industries[].comparison_statusstringyesIndustry comparison coverage status.
data.sectors[].industries[].top_movers[]objectnoTop comparable-flow security rows for the industry. Rows with unavailable flow are excluded; a measured zero can remain. Each mover also carries comparable fund count and comparison coverage.
data.sectors[].compareobjectyesPresent when compare=prev. Flow change and momentum shift are null if either quarter's comparable flow is unavailable; prev_comparison_status states the prior quarter's coverage.
data.quarter_metadataobjectnoFiling-completeness state for the quarter: `{ quarter, filing_deadline, is_complete, days_until_deadline }`. Same shape as [GET /api/v1/form-13f/filing-progress](/docs/institutional-holdings/filing-progress-tracking/get-form-13f-filing-progress). `is_complete=false` during filing season — gate downstream sector-rotation analysis until the quarter has matured.

Sample response

·
  • "status": "success"
  • "data":
    • "quarter": "2025-12-31"
    • "total_sectors": 11
    • "sectors":
    • "quarter_metadata":
    }
}

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/form-13f/aggregation/by-sector?quarter=2025Q4&compare=false&sort=filed_at" \
  -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).