/api/v1/form-13f/cross-filing-signalsSecurities where corporate insiders made open-market purchases and institutions show positive reporter-comparable Form 13F flow.
Securities where corporate insiders made open-market purchases and institutions show positive reporter-comparable Form 13F flow. Each signal exposes the common-reporter comparison coverage; first-time reporters alone cannot create an institutional accumulation signal.
Why use this
Common use case
Cross-filing convergence requires two measured facts: qualifying Form 4 open-market insider purchases and positive Form 13F flow among managers that reported holdings in both adjacent quarters. First-time Form 13F reporters remain in current ownership totals but do not create a purchase signal; full liquidations and new positions inside the common reporter roster remain trading events. Each signal returns comparable holder count and complete, partial, unavailable, or legacy-unknown coverage. Insider-window rules, scoring components, market-data enrichment, and endpoint parameters are unchanged.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| quarter | query | optional | — | — | Quarter end date YYYY-MM-DD (e.g. 2025-12-31). Defaults to latest available. | 2025Q4 |
| window_before | query | optional | 30 | — | Days before quarter start to look for insider purchases (0-90). | — |
| window_after | query | optional | 45 | — | Days after quarter end to look for insider purchases (0-90). | — |
| limit | query | optional | 50 | — | Max results (1-100). | 20 |
| min_insider_buyers | query | optional | 1 | — | Minimum distinct insider buyers to include in results. | — |
| min_fund_flow | query | optional | 0 | — | Minimum institutional fund flow ($) to include in results. | — |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| status | string | no | Always `success` on a 2xx response. Custom envelope (not the standard `ApiResponse`) — `data` carries `quarter`, `time_window`, `signal_count`, `signals[]`, `coverage_note`. |
| 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.time_window | object | no | The exact insider-purchase window used for cross-filing convergence: `{ start, end, description }`. `start = quarter_start - window_before` (default 30 days); `end = quarter_end + window_after` (default 45 days). The 45-day default tail captures Form 4 filings that arrive AFTER the 13F quarter-end (insiders have 2 business days post-trade to file Form 4). |
| data.signal_count | integer | no | Number of securities with both qualifying insider purchases and positive comparable institutional flow. First-reporter ownership is excluded from the flow test but remains in total ownership. |
| data.signals | array | no | Per-security convergence signals. Sorted by `fund_flow DESC` by default. Each signal carries the institutional-side aggregates from `sec_13f_summary` AND the insider-side aggregates from `insider.transactions_non_derivative` (P-code = open-market purchase) — the headline 'smart money convergence' rows. |
| data.signals[].cusip | string | no | 9-character CUSIP — natural primary key for the convergence row. |
| data.signals[].symbol | string | yes | Resolved ticker (canonical hyphen form for multi-class issuers). Null when CUSIP is unmapped. |
| data.signals[].name_of_issuer | string | no | Issuer name from `cusip_security_catalog`. Casing preserved verbatim. |
| data.signals[].issuer_cik | string | yes | Issuer CIK as a 10-character zero-padded string (the COMPANY's CIK, NOT the institutional filer's CIK). Null when the issuer-CIK enrichment is missing for this CUSIP. |
| data.signals[].fund_flow | number | no | Positive institutional dollar flow from usable common-reporter comparisons. The endpoint's positive-flow filter excludes null and non-positive values. |
| data.signals[].fund_count | integer | no | Complete current admitted holder count, including first-time reporters. |
| data.signals[].fund_count_comparable | integer | yes | Current holders inside usable common-reporter comparisons. |
| data.signals[].comparison_position_count | integer | yes | Usable manager-security comparisons supporting the institutional accumulation signal. |
| data.signals[].comparison_unavailable_count | integer | yes | Unavailable common-reporter comparisons for the security. |
| data.signals[].comparison_status | string | yes | complete, partial, unavailable, or null for legacy unknown comparison coverage. |
| data.signals[].new_buys_count | integer | no | Common-reporting managers that held no prior position and hold one now. Managers first entering the reporter roster are not included in this purchase count. |
| data.signals[].total_value | number | no | Total institutional position value this quarter, in USD. Sum of `value_usd` across all funds holding this CUSIP. |
| data.signals[].total_shares | number | no | Total shares held across all institutional funds this quarter. NOT split-adjusted — for split-adjusted aggregations use [GET /api/v1/tickers/{ticker}/fund-trends](/docs/ticker-research/get-tickers-ticker-fund-trends). |
| data.signals[].fund_flow_pct | number | no | Comparable institutional flow divided by complete current institutional value. This percentage can be below the ownership change because reporting entry shares are excluded from trading flow. |
| data.signals[].insider_buyer_count | integer | no | Distinct count of insiders who made open-market PURCHASES (Form 4 P-code) within `time_window`. Use `min_insider_buyers=2` to filter for multi-insider convergence (e.g. CEO AND CFO both buying — a much stronger signal than a single insider). |
| data.signals[].insider_buy_value | number | no | Total dollar value of insider purchases (Form 4 P-code) within `time_window`, in USD. Computed as `sum(shares_traded * price_per_share)` across all P-code transactions for the issuer's CIK. |
| data.signals[].first_buy_date | string | no | ISO `YYYY-MM-DD` date of the EARLIEST insider purchase within `time_window`. Useful for sequencing analysis ('insider bought first, then funds piled in'). |
| data.signals[].last_buy_date | string | no | ISO `YYYY-MM-DD` date of the LATEST insider purchase within `time_window`. `last_buy_date - first_buy_date = insider_buying_duration` — concentrated buying (small range) is a stronger signal than spread-out buying. |
| data.signals[].attractiveness_score | number | yes | 0-100 investment attractiveness composite score — only computed for the TOP 20 signals by fund_flow (market-data enrichment is rate-limited; results Redis-cached 24h). Combines 5 components: ownership ratio, fund stability, market cap, inverse volatility, and fund flow significance. Null for signals 21+ (out of enrichment budget). |
| data.signals[].attractiveness_components | array | yes | Individual scoring component breakdown: `[{ name, score }, ...]`. Components are independently nullable — partial scores computed from available data (e.g. if the market-data volatility lookup fails, the volatility component is omitted but the others still surface). Null for signals beyond the top-20 enrichment cap. |
| data.coverage_note | string | no | Human-readable note on enrichment coverage: e.g. `'4/4 signals enriched with attractiveness scores (top 20 by fund flow).'`. Render in UI to set expectations on which signals have full vs partial scoring. |
Sample response
- "status": "success"
- "data":
- "quarter": "2025-12-31"
- "time_window":
- "signal_count": 4
- "signals":
- "coverage_note": "4/4 signals enriched with attractiveness scores (top 20 by fund flow)."
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/cross-filing-signals?quarter=2025Q4&limit=20" \
-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).