/api/v1/form-13f/aggregation/by-sectorGet institutional fund flows aggregated by sector and industry with momentum labels, flow significance metrics, and top movers drill-down.
Get institutional fund flows aggregated by sector and industry with momentum labels, flow significance metrics, and top movers drill-down. Response includes quarter_metadata (quarter, filing_deadline, is_complete, days_until_deadline) indicating whether the quarter's data is complete or still accumulating.
Why use this
Common use case
Pre-aggregated sector- and industry-level 13F analytics — the headline endpoint that powers sector-rotation dashboards. Backed by the sec_13f_sector_summary materialized view (refreshed ~6h post-filing). Each sector carries flow significance (fund_flow / total_value * 100), a 5-tier momentum classification (Strong Buying to Strong Selling), ETF-vs-active value split, and a nested industry breakdown — drill from 'Technology is seeing Strong Buying' to 'Semiconductors is the driver' to 'NVDA, AMD, AVGO are the top movers' in a single API call.
Use ?compare=prev to surface quarter-over-quarter momentum shifts (e.g. 'Q3 was Strong Growth Rotation but Q4 shifted to Strong Value Rotation') — useful for macro-rotation alerting. Combine with GET /api/v1/form-13f/market-rotation for value/growth and cyclical/defensive bucket-level rotation signals at the macro tier.
Designed for the 'portfolio managers tracking sector rotation across institutional holders' persona — combine with GET /api/v1/form-13f/aggregation/by-ticker for per-ticker drill-down within a sector. The confidence field gates display: filter to high confidence only when surfacing actionable signals during early filing season (when sparse data could mislead). All monetary values are in USD (post-Plan-51 thousands correction).
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 | Always `success` on a 2xx response. Custom envelope (not the standard `ApiResponse`) — carries `data` directly with `quarter`, `sector_count`, `sectors[]`, `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.sector_count | integer | no | Total number of sectors with non-zero institutional flow this quarter. Typically 10-11 (the standard Sharadar sector taxonomy). |
| 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 | Sharadar 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 | no | Net dollar flow into the sector this quarter, in USD (post-Plan-51 thousands correction). Positive = net institutional buying; negative = net selling. The headline sector-rotation metric. |
| 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[].fund_count | integer | no | Number of distinct funds with at least one position in this sector. Sectors with high fund_count + high fund_flow indicate broad institutional consensus on the sector direction. |
| 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 | no | `fund_flow / total_value * 100` — measures flow significance relative to sector size. A 20% flow_significance_pct means institutions added 20% more value than they currently hold (very strong inflow). Used for the `momentum` classification. |
| data.sectors[].momentum | string | no | 5-tier momentum label derived from `flow_significance_pct`: `Strong Buying` (≥10%), `Moderate Buying` (≥3%), `Neutral` (-3 to +3%), `Moderate Selling` (≤-3%), `Strong Selling` (≤-10%). The single most-used field for sector-rotation dashboards. |
| data.sectors[].confidence | string | no | Data-quality confidence flag: `high` (sector has >100 funds + filing_progress >80%), `medium` (>30 funds OR >50% complete), `low` (sparse coverage). Use to gate downstream display ('Show only high-confidence signals'). |
| data.sectors[].industries | object | no | Industry-level breakdown: `{ inflows: [...], outflows: [...] }`. Each direction is sorted by `fund_flow` (inflows DESC, outflows ASC by absolute value). Page size capped by `industry_limit` (default 15, max 100, or `all` for full breakdown). |
| data.sectors[].industries.inflows[] | object | no | Per-industry inflow row: `{ industry, fund_flow, total_value, fund_count, top_movers: [...] }`. `top_movers` is a top-5 list of CUSIPs by absolute fund_flow within the industry. |
| data.sectors[].industries.inflows[].top_movers[] | object | no | Per-CUSIP mover row: `{ cusip, ticker, name, fund_flow, total_value }`. The 'NVDA, AMD, AVGO drove Semiconductor inflows' drill-down. Limited to 5 per industry to keep payload bounded. |
| data.sectors[].compare | object | yes | QoQ comparison block — present ONLY when `?compare=prev`. Shape: `{ flow_change, momentum_shift, fund_count_change, value_change_pct }`. `momentum_shift` is a string like `'Strong Growth -> Moderate Value'` indicating cross-tier movement. |
| 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"
- "sector_count": 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" \
-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).