Skip to content
/api/v1/ownership/aggregation/by-industry

13D/G activity aggregated per industry — finer-grained sibling of by-sector with identical semantics and coverage accounting.

13D/G activity aggregated per industry — finer-grained sibling of by-sector with identical semantics and coverage accounting.

Why use this

Identical construction and coverage semantics to by-sector, one level finer. Same four rules: one row per filing rather than per filer, dollars and counts only at group level, 13D priced at the event-date close while 13G is counts-only, and conversions excluded from flow. Industry is resolved through the same single lookup as sector, so an issuer missing from the daily equity snapshot is excluded here too and reported in `meta.coverage.filings_ungrouped`.

Common use case

Narrow a sector signal to the industry driving it; find the industries where 5%-plus holders are most active.

Per-industry 13D/G aggregation. Same rules and coverage semantics as by-sector, one level finer.

Parameters

NameInRequiredDefaultAllowedDescriptionExample
dateFromqueryoptionalInclusive lower bound on `filedAt`, ISO `YYYY-MM-DD`. Defaults to 30 days before `dateTo`. Window capped at 366 days.2026-06-27
dateToqueryoptionalInclusive upper bound on `filedAt`. Defaults to today. Window capped at 366 days.2026-07-27
formTypequeryoptionalRestrict to exactly one of `SC_13D`, `SC_13D_A`, `SC_13G`, `SC_13G_A`.SC_13D
minOwnershipqueryoptionalMinimum aggregate percent of class. Continuous.11.5
maxOwnershipqueryoptionalMaximum aggregate percent-of-class per filing.20
directionqueryoptional`up` / `down` position-change filter (share-change signal, percent fallback).up
minPercentChangequeryoptionalMinimum absolute percent-of-class change for amendments.1
limitqueryoptional50Maximum industry rows (1-500), ranked by total priced flow then filing count.50

Response schema

FieldTypeNullableDescription
data[].groupstringnoIndustry name, same taxonomy as the sector cut.
data[].filingsintegerno13D/G filings in the window for this industry.
data[].companiesintegernoDistinct issuers touched.
data[].holdersintegernoDistinct beneficial holders, unified identity.
data[].form_13dobjectno13D counts plus dollar flow.
data[].form_13gobjectno13G counts only.
data[].conversionsobjectno`{to_13d, to_13g, total}`, excluded from flow.

Sample response

·
  • "status": "success"
  • "data":
    ]
  • "meta":
    • "groupBy": "industry"
    • "dateFrom": "2026-06-27"
    • "dateTo": "2026-07-27"
    • "returned": 1
    • "totalGroups": 78
    • "coverage":
    }
}

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/ownership/aggregation/by-industry?api_Token=YOUR_API_KEY&dateFrom=2026-06-27&dateTo=2026-07-27&formType=SC_13D&minOwnership=11.5&maxOwnership=20&direction=up&minPercentChange=1&limit=50" \
  -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).