/api/v1/ownership/aggregation/by-ticker13D/G activity aggregated per issuer over a filing-date window — counts, distinct companies/holders, and event-date-priced dollar flow for fast-clock filings.
13D/G activity aggregated per issuer over a filing-date window — counts, distinct companies/holders, and event-date-priced dollar flow for fast-clock filings.
10 tokensSince v3.130.0
Why use this
The 5%-plus-holder counterpart to the 13F and Form 4 sector aggregations: where are beneficial owners building and cutting. Aggregated ONE ROW PER FILING, never per filer — 13D/G filings are routinely made by a group of affiliated entities reporting the same block (measured: 94 of 100 recent amendments name more than one filer, up to 18), so a per-filer sum would multiply the same shares by the number of entities on the cover page. Dollar flow is 13D ONLY, valued at the close on each filing's event date: a 13D amendment is due within two business days of the change and an initial 13D within five business days of the acquisition, so that close is a fair proxy for what was paid. 13G returns COUNTS ONLY and always will — an institutional 13G is filed up to 45 days after quarter end and its position change accumulates over months (median 156 days between filings), so no transaction price can be honestly inferred. Schedule conversions (13G to 13D and the reverse) are counted on their own line and excluded from every flow figure: a form change is not a purchase. by-ticker covers EVERY filing including issuers with no sector classification.
Common use case
Rank the issuers where 5%-plus holders moved most this month; spot new activist positions; feed a per-stock smart-money panel.
Per-issuer 13D/G aggregation over a filing-date window. Aggregated one row per filing (group-filing safe), 13D priced at the event-date close, 13G counts only, conversions excluded from flow.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| dateFrom | query | optional | — | — | Inclusive lower bound on `filedAt` (ISO `YYYY-MM-DD`). Defaults to `dateTo` minus 30 days. The window is bounded by FILING date — see `meta.clock.windowBoundedBy`. | 2026-06-27 |
| dateTo | query | optional | — | — | Inclusive upper bound on `filedAt` (ISO `YYYY-MM-DD`). Defaults to today. Maximum window `dateFrom`→`dateTo` is 366 days — larger windows return HTTP 400. | 2026-07-27 |
| formType | query | optional | — | — | Restrict to exactly one of `SC_13D`, `SC_13D_A`, `SC_13G`, `SC_13G_A` before aggregation. Omit for all four. | SC_13D |
| minOwnership | query | optional | — | — | Minimum aggregate percent of class on the filing. Continuous — pass any value, not a fixed threshold bucket. A threshold is a disclosure trigger, not a measurement, so the caller picks the number. | 11.5 |
| maxOwnership | query | optional | — | — | Keep only filings whose aggregate percent-of-class is at most this value. Combine with `minOwnership` for a band (e.g. 5-10% accumulation watch). | 20 |
| direction | query | optional | — | — | `up` keeps only filings whose position INCREASED vs the prior filing (share change, falling back to percent change when shares are unavailable); `down` keeps decreases. Filings with no usable delta are excluded when this filter is set. | up |
| minPercentChange | query | optional | — | — | Keep only amendments whose ABSOLUTE percent-of-class change is at least this value. Filings without a percent change are excluded when set. | 1 |
| limit | query | optional | 50 | — | Maximum group rows returned (1-500, default 50). `meta.totalGroups` always reports the full group count before this cut. | 50 |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| data[].group | string | no | The issuer ticker (by-ticker), sector name (by-sector) or industry name (by-industry). |
| data[].issuer_name | string | yes | Issuer name. by-ticker only. |
| data[].filings | integer | no | 13D/G filings in the window for this group. One filing counts once regardless of how many affiliated filers it names. |
| data[].companies | integer | no | Distinct issuers (by CIK). Always 1 for by-ticker. |
| data[].holders | integer | no | Distinct beneficial holders, keyed on the unified holder identity rather than the filer name — the same firm appears in raw EDGAR data as both `JPMORGAN CHASE & CO.` and `JPMORGAN CHASE & CO`, which a name-keyed count would treat as two. |
| data[].form_13d | object | no | 13D bucket. Counts plus dollar flow. |
| data[].form_13d.filings | integer | no | 13D and 13D/A filings in the window. |
| data[].form_13d.new_positions | integer | no | Initial 13D filings — a holder crossing 5% for the first time. The whole reported stake is treated as the position established. |
| data[].form_13d.amendments | integer | no | 13D/A filings. |
| data[].form_13d.increases | integer | no | Amendments whose position grew. |
| data[].form_13d.decreases | integer | no | Amendments whose position shrank. |
| data[].form_13d.unchanged | integer | no | Amendments that changed something other than position size (purpose, address, group membership). |
| data[].form_13d.no_delta | integer | no | Amendments with no usable change figure, because the prior filing in the chain could not be linked. Reported rather than assumed to be zero movement. |
| data[].form_13d.inflow_usd | number | no | Sum of positive position changes valued at the event-date close. |
| data[].form_13d.outflow_usd | number | no | Absolute sum of negative position changes, same valuation. |
| data[].form_13d.net_flow_usd | number | no | inflow minus outflow. The headline magnitude for this endpoint — dollars are the only quantity additive across issuers. |
| data[].form_13d.priced_filings | integer | no | 13D filings that contributed to the dollar figures. |
| data[].form_13d.unpriced_filings | integer | no | 13D filings excluded from the dollar figures because no close was available on the event date or no change figure existed. Non-zero means the flow understates activity. |
| data[].form_13g | object | no | 13G bucket. COUNTS ONLY — carries no money keys at all, deliberately, so an absent figure can never be read as zero flow. Same count fields as form_13d minus the money ones. |
| data[].conversions | object | no | `{to_13d, to_13g, total}`. Schedule conversions, excluded from every flow figure. `to_13d` (a passive holder going active) is the single most decisive signal in this dataset. |
| meta.coverage | object | no | What the window contained and what was left out: filings_in_window, filings_grouped, filings_ungrouped (no sector match), filings_13d, filings_13g, conversions_excluded_from_flow, amendments_without_delta, and on by-sector/by-industry the priced/unpriced 13D split. A partial answer never looks complete. |
Sample response
·
- "status": "success"
- "data":
- "meta":
- "groupBy": "ticker"
- "dateFrom": "2026-06-27"
- "dateTo": "2026-07-27"
- "returned": 1
- "totalGroups": 412
- "coverage":
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/ownership/aggregation/by-ticker?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).