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

Identify smart money convergence: securities where both corporate insiders (Form 4 open-market purchases) and institutional funds (13F accumulation) are buying in overlapping time windows.

Identify smart money convergence: securities where both corporate insiders (Form 4 open-market purchases) and institutional funds (13F accumulation) are buying in overlapping time windows. Each signal includes insider buyer count, buy value, institutional fund flow, fund count, and an investment attractiveness score (0-100) computed from market data components. Response includes quarter_metadata (quarter, filing_deadline, is_complete, days_until_deadline) indicating whether the quarter's data is complete or still accumulating.

free

Why use this

Cross-schema SQL join between insider.transactions_non_derivative (Form 4 P-code purchases) and sec_13f_summary (13F quarterly aggregates) via ticker matching. Attractiveness score has 5 components: ownership ratio, fund stability, market cap, volatility (inverse), and fund flow significance. Components are independently nullable -- partial scores computed from available data. Top signals by fund flow are enriched with Yahoo Finance market data (Redis-cached 24h).

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.

Identifies 'smart money convergence' signals — securities where BOTH corporate insiders (Form 4 open-market purchases via the P transaction code) AND institutional funds (13F accumulation) are buying within an overlapping time window. The signal type is the headline output of FinRadar's Phase 47-era 13D/G + 13F unified-holder signal: when an insider with private knowledge of company prospects AND institutional funds with deep research teams INDEPENDENTLY conclude a position is worth buying at the same time, the convergence is a powerful conviction signal.

Cross-schema SQL join: insider.transactions_non_derivative (Form 4 P-code purchases) ⋈ sec_13f_summary (13F quarterly aggregates) via issuer ticker/CUSIP matching, with the Phase 47 unified-holder normalization layer ensuring 13D/G filers (often the same insiders that show up on Form 4) are correctly attributed.

The attractiveness score (0-100) is a composite of 5 independently-computed components: (1) ownership ratio, (2) fund stability (consistency of holders across quarters), (3) market cap, (4) inverse volatility (lower vol = higher score), (5) fund flow significance. Components are NULL-tolerant — if Yahoo Finance volatility lookup fails for a security, the score still computes from the other 4 components. Enrichment is capped to the top-20 signals by fund_flow (Yahoo Finance rate limit); signals 21+ have null attractiveness_score.

For the canonical Form 4 insider feed see GET /insider-module/api/insiders/transactions/latest; for the 13D/G unified-holder surface (which feeds the Phase 47 normalization layer used here) see GET /api/v1/13dg/holders/{ticker}. All monetary values in USD (post-Plan-51 thousands correction).

Cost: heavy quant endpoint — runs a cross-schema JOIN + Yahoo Finance enrichment on the top-20 results. Read-time computation (no precompute layer); typical latency 200-800ms depending on Redis cache hit rate on the YF enrichment.

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_countintegernoTotal number of convergence signals — securities with BOTH insider buying (Form 4 P-code purchases) AND institutional accumulation (positive 13F fund_flow) within `time_window`. Capped by `limit` (default 50).
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_flownumbernoNet institutional dollar flow this quarter (USD, post-Plan-51 thousands correction). For convergence signals to be meaningful, this is always positive.
data.signals[].fund_countintegernoNumber of distinct institutional funds with a position in this CUSIP this quarter.
data.signals[].new_buys_countintegernoNumber of institutional funds that opened a NEW position this quarter (no prior-quarter row). Sub-aggregate of `fund_count`. High new_buys_count + insider buying = strong conviction signal.
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_pctnumberno`fund_flow / total_value * 100` — flow significance relative to total institutional ownership. 100% means ALL institutional value is from this quarter's flow (i.e. brand-new institutional discovery).
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 (Yahoo Finance 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 Yahoo Finance 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" \
  -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).