/api/v1/form-13f/aggregation/by-sectorInstitutional 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.
Why use this
Common use case
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
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| quarter | query | optional | — | — | Report period YYYY-MM-DD (e.g. 2025-12-31). Defaults to latest available quarter. | 2025Q4 |
| compare | query | optional | — | — | Set to 'prev' to include quarter-over-quarter deltas per sector: flow_change, momentum_shift, fund_count_change, value_change_pct. | false |
| industry_limit | query | optional | 15 | — | Max industries per direction (inflows + outflows) per sector. Use 'all' for full breakdown. Range: 1-100. | — |
| sort | query | optional | fund_flow | — | 'fund_flow' (absolute $) or 'significance' (flow_significance_pct). Applies to both sector and industry ordering. | filed_at |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| status | string | no | success on a successful standard API response; data contains quarter, total_sectors, sectors, and quarter_metadata. |
| data.quarter | string | no | ISO `YYYY-MM-DD` reporting quarter (always a calendar quarter end). Echoed from the request; defaults to the latest available quarter. |
| data.total_sectors | integer | no | Number of sector rows returned for the quarter. |
| data.sectors | array | no | Per-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[].sector | string | no | Sector classification (e.g. `Technology`, `Healthcare`, `Financial Services`, `Energy`, `Utilities`, `Consumer Cyclical`, `Consumer Defensive`, `Industrials`, `Basic Materials`, `Communication Services`, `Real Estate`). |
| data.sectors[].fund_flow | number | yes | Comparable net dollar flow for the sector. Null means no usable comparison; zero means measured no net flow. |
| data.sectors[].comparison_position_count | integer | yes | Usable manager-security comparisons rolled into the sector. |
| data.sectors[].comparison_unavailable_count | integer | yes | Unavailable manager-security comparisons rolled into the sector. |
| data.sectors[].comparison_status | string | yes | complete, partial, unavailable, or null for legacy unknown coverage. |
| data.sectors[].total_value | number | no | Total 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_count | integer | no | Number of distinct current funds represented in the sector rollup. |
| data.sectors[].etf_value | number | no | Sub-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_pct | number | yes | Comparable fund flow divided by current total value. Null when comparable flow is unavailable or total value is zero. |
| data.sectors[].momentum_label | string | yes | Momentum label derived from comparable flow significance. Null when comparable activity is unavailable. |
| data.sectors[].low_confidence | boolean | no | Low-confidence data-quality flag from the existing sector coverage rules. |
| data.sectors[].industries | array | no | Ranked 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[] | object | no | Industry row in data.sectors[].industries. fund_flow and derived significance or momentum are nullable when comparison is unavailable. |
| data.sectors[].industries[].comparison_position_count | integer | yes | Usable manager-security comparisons rolled into the industry. |
| data.sectors[].industries[].comparison_unavailable_count | integer | yes | Unavailable comparisons rolled into the industry. |
| data.sectors[].industries[].comparison_status | string | yes | Industry comparison coverage status. |
| data.sectors[].industries[].top_movers[] | object | no | Top 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[].compare | object | yes | Present 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_metadata | object | no | Filing-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
| 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/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).