Skip to content
/api/v1/form-13f/cross-filing-signals

Securities 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.

free

Why use this

Crosses Form 4 insider purchases with positive institutional flow measured only among managers that submitted selected valid holdings reports in both adjacent quarters. Current ownership totals still include all admitted current reporters.

Common use case

Screen for securities with institutional AND insider buying convergence -- a powerful signal because insiders have inside knowledge and institutions have research teams, so agreement suggests strong conviction. Use min_insider_buyers=2 to filter for multi-insider buying (CEO + CFO both buying). Adjust window_before/window_after to widen or narrow the insider purchase window around the 13F quarter.

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

NameInRequiredDefaultAllowedDescriptionExample
quarterqueryoptionalQuarter end date YYYY-MM-DD (e.g. 2025-12-31). Defaults to latest available.2025Q4
window_beforequeryoptional30Days before quarter start to look for insider purchases (0-90).
window_afterqueryoptional45Days after quarter end to look for insider purchases (0-90).
limitqueryoptional50Max results (1-100).20
min_insider_buyersqueryoptional1Minimum distinct insider buyers to include in results.
min_fund_flowqueryoptional0Minimum institutional fund flow ($) to include in results.

Response schema

FieldTypeNullableDescription
statusstringnoAlways `success` on a 2xx response. Custom envelope (not the standard `ApiResponse`) — `data` carries `quarter`, `time_window`, `signal_count`, `signals[]`, `coverage_note`.
data.quarterstringnoISO `YYYY-MM-DD` reporting quarter — always a calendar quarter end. Echoed from the request; defaults to the latest available quarter.
data.time_windowobjectnoThe 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_countintegernoNumber 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.signalsarraynoPer-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[].cusipstringno9-character CUSIP — natural primary key for the convergence row.
data.signals[].symbolstringyesResolved ticker (canonical hyphen form for multi-class issuers). Null when CUSIP is unmapped.
data.signals[].name_of_issuerstringnoIssuer name from `cusip_security_catalog`. Casing preserved verbatim.
data.signals[].issuer_cikstringyesIssuer 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_flownumbernoPositive institutional dollar flow from usable common-reporter comparisons. The endpoint's positive-flow filter excludes null and non-positive values.
data.signals[].fund_countintegernoComplete current admitted holder count, including first-time reporters.
data.signals[].fund_count_comparableintegeryesCurrent holders inside usable common-reporter comparisons.
data.signals[].comparison_position_countintegeryesUsable manager-security comparisons supporting the institutional accumulation signal.
data.signals[].comparison_unavailable_countintegeryesUnavailable common-reporter comparisons for the security.
data.signals[].comparison_statusstringyescomplete, partial, unavailable, or null for legacy unknown comparison coverage.
data.signals[].new_buys_countintegernoCommon-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_valuenumbernoTotal institutional position value this quarter, in USD. Sum of `value_usd` across all funds holding this CUSIP.
data.signals[].total_sharesnumbernoTotal 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_pctnumbernoComparable 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_countintegernoDistinct 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_valuenumbernoTotal 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_datestringnoISO `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_datestringnoISO `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_scorenumberyes0-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_componentsarrayyesIndividual 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_notestringnoHuman-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

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/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).