/insider-module/api/insiders/screenScreen for specific insider criteria.
Screen for specific insider criteria. Supports sector/industry filtering.
10 tokensSince v1.5.0
Why use this
Finviz-style insider screener — narrower and more deduplicated than `/transactions/search`. Pre-aggregates duplicate rows for the same insider on the same day (so a CEO that filed three back-to-back code-S sales on one date appears as one row), and is optimized for ≤500-row screening result sets that drive 'who's selling NVDA today?' tables on retail dashboards. Lacks the heavier filters of `/transactions/search` (no `min_value`, no `is_c_suite`, no `dedup_owners` flag) so use this when you want a fast clean ticker/sector/date-range screen, and use `/transactions/search` when you need the full filter matrix.
Common use case
Finding companies with net insider buying in the Technology sector within the last week, sorted by sentiment.
Insider-activity screener — returns one aggregate row PER COMPANY (not per transaction), so you can rank tickers by net insider sentiment, net value, or activity volume. Filter by date window, sentiment/net-value thresholds, minimum transactions/insiders, C-suite-only, the exclusion flags, and sector/industry. Combine with GET /insider-module/api/insiders/aggregation/by-sector when you want sector-level rather than company-level roll-ups, or GET /insider-module/api/insiders/transactions/search for the per-transaction rows behind each company.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| filed_at_days | query | optional | 7 | — | Look back this many days by FILING date (when the Form 4 landed on EDGAR). Range 1–3650. | 30 |
| transaction_days | query | optional | — | — | Look back this many days by TRANSACTION (trade-execution) date. Range 1–365. Omit to derive the transaction window from `filed_at_days` (with a 2-week filing-delay buffer). | 30 |
| sentiment_gt | query | optional | — | — | Keep only companies whose count-based `sentiment_score` is greater than this (range -1.0 to 1.0). E.g. `0.5` = strong net buying. | 0.5 |
| sentiment_lt | query | optional | — | — | Keep only companies whose count-based `sentiment_score` is less than this (range -1.0 to 1.0). E.g. `-0.5` = strong net selling. | -0.5 |
| net_value_gt | query | optional | — | — | Keep only companies whose `net_value` (buy USD − sell USD) is greater than this. | 1000000 |
| net_value_lt | query | optional | — | — | Keep only companies whose `net_value` is less than this. | -1000000 |
| min_transactions | query | optional | 1 | — | Minimum number of transactions a company must have to appear in results. | 3 |
| min_insiders | query | optional | 1 | — | Minimum number of distinct insiders a company must have to appear in results. | 2 |
| csuite_only | query | optional | false | — | When `true`, restrict the aggregation to C-suite (CEO/CFO/COO/CIO/CTO/General Counsel) activity. | true |
| exclude_10b5_1 | query | optional | false | — | When `true`, exclude pre-planned Rule 10b5-1 trades from the filtered totals (the `rule_10b5_1_*` transparency fields are unaffected). | true |
| exclude_cashless | query | optional | false | — | When `true`, exclude cashless option exercises from the filtered totals. | true |
| exclude_sell_to_cover | query | optional | false | — | When `true`, exclude RSU sell-to-cover (tax-withholding) sales from the filtered totals. | true |
| limit | query | optional | 100 | — | Maximum number of company rows to return (1–1000). | 50 |
| offset | query | optional | 0 | — | Zero-based pagination offset. | 0 |
| sort_by | query | optional | abs_sentiment | sentiment, abs_sentiment, net_value, abs_net_value, total_transactions | Sort key. `abs_sentiment`/`abs_net_value` rank by magnitude regardless of direction (most-active first); `sentiment`/`net_value` rank signed (most-bullish first); `total_transactions` ranks by activity volume. | net_value |
| sector | query | optional | — | — | Sector classification, case-sensitive (e.g. `Technology`, `Healthcare`, `Financial Services`). Restricts the screen to one sector. Tickers without a sector mapping are excluded. | Technology |
| industry | query | optional | — | — | Industry classification, case-sensitive (more specific than `sector`). Em-dash characters require URL-encoding when round-tripping. Use the `/financials/tickers` endpoint to enumerate exact valid values. | Consumer Electronics |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| results | array | no | Array of per-COMPANY aggregate rows (one entry per ticker with activity in the window) — NOT per-transaction rows. Sorted by `sort_by`. Empty array when no company matches the filters. |
| results[].ticker | string | no | Issuer ticker (canonical hyphen form). |
| results[].company_name | string | no | Issuer name. |
| results[].issuer_cik | string | no | Issuer CIK (10-character zero-padded). |
| results[].total_transactions | integer | no | Total transactions matching filters. |
| results[].total_buys | integer | no | Total buy transactions matching filters. |
| results[].total_sells | integer | no | Total sell transactions matching filters. |
| results[].total_buy_value | string | no | Decimal value serialized as a JSON string. Total buy value (USD) matching filters. |
| results[].total_sell_value | string | no | Decimal value serialized as a JSON string. Total sell value (USD) matching filters. |
| results[].net_value | string | no | Decimal value serialized as a JSON string. Net value (buy − sell, USD) matching filters. |
| results[].discretionary_buy_shares | string | no | Decimal value serialized as a JSON string. COMMON SHARES bought on the open market — the share-count companion to `discretionary_buy_value`, scoped by the same rule (SEC code `P`, excluding Rule 10b5-1 plan trades). Form 4 Table I only: a Table II quantity is a count of derivative securities (option/warrant/RSU contracts), not shares, so warrant and option purchases contribute value and counts here but no shares. As-filed, NOT split-adjusted. `0` when the window holds no qualifying open-market buys. |
| results[].discretionary_sell_shares | string | no | Decimal value serialized as a JSON string. COMMON SHARES sold on the open market — the share-count companion to `discretionary_sell_value`, scoped by the same rule (SEC code `S`, excluding Rule 10b5-1 plan trades, RSU sell-to-cover and cashless-exercise sales). Form 4 Table I only, on the same basis as `discretionary_buy_shares`. As-filed, NOT split-adjusted. |
| results[].unique_insiders | integer | no | Count of unique insiders matching filters. |
| results[].unique_buyers | integer | no | Count of unique buyers matching filters. |
| results[].unique_sellers | integer | no | Count of unique sellers matching filters. |
| results[].rule_10b5_1_buy_count | integer | no | ACTUAL 10b5-1 buy-plan count (transparency — NOT affected by `exclude_10b5_1`). |
| results[].rule_10b5_1_sell_count | integer | no | ACTUAL 10b5-1 sell-plan count (transparency). |
| results[].rule_10b5_1_buy_value | string | no | Decimal value serialized as a JSON string. ACTUAL 10b5-1 buy value, USD (transparency). |
| results[].rule_10b5_1_sell_value | string | no | Decimal value serialized as a JSON string. ACTUAL 10b5-1 sell value, USD (transparency). |
| results[].csuite_buy_count | integer | no | C-suite buy count matching filters. |
| results[].csuite_sell_count | integer | no | C-suite sell count matching filters. |
| results[].csuite_buy_value | string | no | Decimal value serialized as a JSON string. C-suite buy value, USD, matching filters. |
| results[].csuite_sell_value | string | no | Decimal value serialized as a JSON string. C-suite sell value, USD, matching filters. |
| results[].csuite_net_value | string | no | Decimal value serialized as a JSON string. C-suite net value, USD, matching filters. |
| results[].officer_buy_value | string | no | Decimal value serialized as a JSON string. Officer buy value, USD, matching filters. |
| results[].officer_sell_value | string | no | Decimal value serialized as a JSON string. Officer sell value, USD, matching filters. |
| results[].director_buy_value | string | no | Decimal value serialized as a JSON string. Director buy value, USD, matching filters. |
| results[].director_sell_value | string | no | Decimal value serialized as a JSON string. Director sell value, USD, matching filters. |
| results[].buy_sell_ratio | number | no | Ratio of buys to sells. |
| results[].sentiment_score | number | no | Count-based sentiment in [-1, +1]. |
| results[].value_sentiment_score | number | no | Value-based sentiment in [-1, +1]. |
| results[].csuite_sentiment_score | number | no | C-suite count-based sentiment in [-1, +1]. |
| results[].value_csuite_sentiment_score | number | no | C-suite value-based sentiment in [-1, +1]. |
| results[].filing_count | integer | no | Distinct filings count for the company in the window. |
| results[].latest_transaction_date | string | yes | ISO `YYYY-MM-DD` of the company's latest transaction in the window. Null when empty. |
| meta | object | no | InsiderScreenMeta result-metadata block. |
| meta.total_results | integer | no | Total matching companies (pre-pagination). |
| meta.returned | integer | no | Number of company rows returned on this page. |
| meta.limit | integer | no | Echo of the effective limit. |
| meta.offset | integer | no | Echo of the requested offset. |
| meta.has_more | boolean | no | `true` when another page is available. |
| meta.request_id | string | yes | Per-request UUID for log correlation. |
| meta.timestamp | string | no | ISO-8601 UTC response timestamp; the runtime can omit the timezone offset. |
| meta.filters_applied | object | no | Verbatim echo of the applied filter set. |
Sample response
·
- "results":
- "meta":
- "total_results": 87
- "returned": 1
- "limit": 100
- "offset": 0
- "has_more": false
- "request_id": "a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d"
- "timestamp": "2026-05-02T15:36:42.117000"
- "filters_applied":
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/insider-module/api/insiders/screen?api_Token=YOUR_API_KEY&filed_at_days=30&transaction_days=30&sentiment_gt=0.5&sentiment_lt=-0.5&net_value_gt=1000000&net_value_lt=-1000000&min_transactions=3&min_insiders=2&csuite_only=true&exclude_10b5_1=true&exclude_cashless=true&exclude_sell_to_cover=true&limit=50&offset=0&sort_by=net_value§or=Technology&industry=Consumer+Electronics" \
-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).