// guide

Insider Trading Screener: Filter SEC Form 4 by Code, Size & Returns

Updated 2026-06-16. By Theodor Nielsen, founder of Form4API.

// answer

To screen insider trades, add filter parameters to /v1/transactions: transaction code, trade size, post-trade return, date range, and more. A single significant=true applies the common signal preset — open-market only, excluding 10b5-1 plan trades and derivatives. The same grammar drives the screener UI and the CSV export endpoint.

Core filters

Every screen is a GET /v1/transactions with query parameters. The core set is available on every plan:

  • Entity: ticker, cik (company), or insider_cik (a specific insider).
  • Transaction code: code=P for a single code, codes=P,S for several, or category=open_market for a named group. Invert with exclude_codes / exclude_category.
  • Date range: from and to (ISO dates) on the transaction date.
  • Quality switches: exclude_10b5=true drops pre-scheduled plan trades; exclude_derivative=true drops option/derivative rows.

See the Form 4 guide for what each transaction code means, and the docs for the full category list.

The significant preset

Most signal work wants the same starting point: open-market transactions only, with 10b5-1 plan trades and derivatives removed. Rather than set three parameters every time, pass significant=true, which seeds exactly that — category=open_market, exclude_10b5=true, exclude_derivative=true. Any explicit parameter you also pass wins over the preset, so you can start broad and narrow from there.

# Open-market, no 10b5-1, no derivatives — the signal baseline
curl "https://api.form4api.com/v1/transactions?significant=true&per_page=50" \
  -H "X-Api-Key: $FORM4API_KEY"

Size & return filters (Pro plan)

The higher-signal filters — trade size and post-trade performance — require the Pro plan or higher. On the free tier they return a 403 with a clear upgrade message.

  • Trade size: min_value / max_value (dollar value = shares × price) and min_shares / max_shares.
  • Post-trade return: min_return_1d, min_return_1w, min_return_1m, min_return_3m, min_return_6m (and their max_ counterparts). Values are fractions — 0.1 means 10%. Require all horizons populated with has_returns=true.
  • Institutional context: inst_ownership_trend=increasing (or decreasing / stable) restricts to companies whose 13F-HR institutional ownership is moving that way.

Example screens

High-conviction open-market buys of at least $100k:

curl "https://api.form4api.com/v1/transactions?significant=true&code=P&min_value=100000&per_page=50" \
  -H "X-Api-Key: $FORM4API_KEY"

Buys that were up 10%+ three months later (back-test the setup):

curl "https://api.form4api.com/v1/transactions?code=P&min_return_3m=0.1&has_returns=true" \
  -H "X-Api-Key: $FORM4API_KEY"

Open-market buys in Q1 2026 where institutions are also accumulating:

curl "https://api.form4api.com/v1/transactions?significant=true&code=P&from=2026-01-01&to=2026-03-31&inst_ownership_trend=increasing" \
  -H "X-Api-Key: $FORM4API_KEY"

Need the whole result set, not a page? Swap /v1/transactions for /v1/transactions/export to stream the same filtered rows as CSV — handy for a spreadsheet or a backtest.

Screener vs the signals endpoint

Screening with /v1/transactions builds your own criteria from raw trades. If you would rather consume ready-made signals, the /v1/signals endpoint returns pre-computed cluster buys and sells — filter with cluster_buy=true or cluster_sell=true — and /v1/signals/sentiment/{ticker} returns a monthly insider-sentiment score. The signals and sentiment endpoints require the Business plan or higher.

curl "https://api.form4api.com/v1/signals?cluster_buy=true&per_page=20" \
  -H "X-Api-Key: $FORM4API_KEY"

Frequently asked questions

How do I screen insider trades?

Screen by adding filter parameters to the /v1/transactions endpoint. Combine entity filters (ticker, cik, insider_cik), transaction code (code or a comma-separated codes list, or a named category), a date range (from, to), and switches like exclude_10b5 and exclude_derivative. A single significant=true parameter applies the common "real signal" preset in one shot — open-market only, with 10b5-1 plan trades and derivative transactions excluded. The same filter grammar works on /v1/transactions/export to stream the matching rows as CSV.

How do I filter for high-conviction insider buys?

Start from significant=true (open-market, no 10b5-1, no derivatives), restrict to purchases with code=P, and add a size floor with min_value (dollar value) or min_shares. For example, significant=true&code=P&min_value=100000 returns open-market purchases worth at least $100,000. The size and value filters require the Pro plan or higher; on the free tier they return a 403 telling you to upgrade.

Can I screen insider trades by their subsequent return?

Yes — Form4API computes post-trade returns at 1-day, 1-week, 1-month, 3-month, and 6-month horizons, and you can filter on them with min_return_1m, max_return_3m, and so on, or require fully-populated returns with has_returns=true. For example, code=P&min_return_3m=0.1&has_returns=true finds open-market buys that were up at least 10% three months later — returns are expressed as fractions, so 0.1 means 10%. This is useful for back-testing which insiders or setups actually preceded gains. Return-based filters are a Pro-plan feature.

What is the difference between the screener and the signals endpoint?

The /v1/transactions filters let you screen raw transactions ad hoc on any combination of code, size, date, and return. The /v1/signals endpoint instead returns pre-computed signals — cluster buys and cluster sells — that the platform derives from those transactions, filtered with cluster_buy=true or cluster_sell=true. Screening is for building your own criteria; signals are for consuming ready-made ones. The signals and sentiment endpoints require the Business plan or higher.

Get API key

500 free requests / day. No credit card.

Get API key

View API docs

curl / JavaScript / Python examples for every endpoint.

View API docs

See pricing

Free, $49, $149, $499 — pick the tier that fits.

See pricing