SEC Form 4 Insider Trades Scraper

Extract transaction-level insider trades from public SEC Form 4 filings by ticker or CIK.

Data fields

FieldTypeDescription
tickerstring | nullValue exported as ticker.
cikstringValue exported as cik.
issuerNamestring | nullValue exported as issuerName.
accessionNumberstringValue exported as accessionNumber.
formTypestringValue exported as formType.
filedAtstring | nullValue exported as filedAt.
periodOfReportstring | nullValue exported as periodOfReport.
filingUrlstringValue exported as filingUrl.

Input preview

tickersTickers
ciksCIKs
startDateStart date
endDateEnd date
formTypesForm types
maxFilingsMaximum filings per issuer

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Extract transaction-level insider trades from public SEC EDGAR ownership filings by ticker or CIK. The Actor saves one row per reported transaction with issuer details, reporting owner roles, shares, prices, values, ownership fields, and SEC source URLs.

At a glance

  • Primary job: Monitor public-company insider transactions from official SEC filings.
  • Input: Tickers and/or CIKs, filing date bounds, form types, and per-issuer filing limits.
  • Output: Insider owner, role flags, transaction code/date, shares, price, value, ownership, and SEC source URLs.
  • Best for: Investor research, compliance exports, BI dashboards, news monitoring, and scheduled watchlists.

Who is this for?

  • Investors and analysts tracking insider purchases, sales, grants, and ownership changes.
  • Compliance teams exporting auditable public Form 4 transaction records by issuer or CIK.
  • Financial journalists monitoring recent insider activity around public companies.
  • Data teams feeding SEC insider transactions into dashboards, alerts, or warehouses.

Input recipes

  • Single ticker smoke test: {"tickers":["AAPL"],"formTypes":["4"],"maxFilings":10}
  • Watchlist: {"tickers":["AAPL","MSFT"],"formTypes":["4","4/A"],"maxFilings":10}
  • Compliance export by CIK: {"ciks":["0000320193","789019"],"formTypes":["3","4","4/A","5"],"maxFilings":25,"includeFootnotes":true}

What data can you extract?

Field Description
ticker, cik, issuerName Public company identifiers resolved from SEC data.
accessionNumber, formType, filedAt, periodOfReport Filing metadata.
filingUrl, xmlUrl Audit links back to SEC EDGAR source documents.
reportingOwnerName, reportingOwnerCik Insider/reporting owner identity.
isDirector, isOfficer, isTenPercentOwner, officerTitle Deterministic relationship flags from the filing.
transactionDate, transactionCode, transactionAcquiredDisposedCode Transaction timing and SEC transaction codes.
securityTitle, shares, pricePerShare, transactionValue Transaction economics when reported. Gifts/grants may have null price/value.
sharesOwnedFollowingTransaction, ownershipNature, isDerivative Post-transaction and derivative/non-derivative ownership details.
footnotes Optional filing footnotes when enabled.
source, scrapedAt Provenance and scrape timestamp.

The Actor also writes RUN_SUMMARY to the default key-value store with processed issuer counts, matched filing counts, saved transactions, warnings, and per-input failures.

Example input

{
  "tickers": ["AAPL", "MSFT"],
  "formTypes": ["4"],
  "maxFilings": 10,
  "includeDerivativeTransactions": false,
  "includeFootnotes": false,
  "proxyConfiguration": { "useApifyProxy": false }
}

Example output

{
  "ticker": "AAPL",
  "cik": "0000320193",
  "issuerName": "Apple Inc.",
  "accessionNumber": "0000320193-26-000001",
  "formType": "4",
  "filedAt": "2026-01-15",
  "periodOfReport": "2026-01-13",
  "filingUrl": "https://www.sec.gov/Archives/edgar/data/320193/...-index.htm",
  "xmlUrl": "https://www.sec.gov/Archives/edgar/data/320193/.../form4.xml",
  "reportingOwnerName": "Example Owner",
  "reportingOwnerCik": "0000000000",
  "isDirector": true,
  "isOfficer": false,
  "isTenPercentOwner": false,
  "officerTitle": null,
  "transactionDate": "2026-01-13",
  "transactionCode": "P",
  "transactionAcquiredDisposedCode": "A",
  "securityTitle": "Common Stock",
  "shares": 1000,
  "pricePerShare": 150.25,
  "transactionValue": 150250,
  "sharesOwnedFollowingTransaction": 5000,
  "ownershipNature": "D",
  "isDerivative": false,
  "footnotes": null,
  "source": "SEC_EDGAR",
  "scrapedAt": "2026-07-21T00:00:00.000Z"
}

API usage

cURL

curl "https://api.apify.com/v2/acts/fetch_cat~sec-form-4-insider-trades-scraper/runs?token=$APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"tickers":["AAPL"],"formTypes":["4"],"maxFilings":10}'

Node.js

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/sec-form-4-insider-trades-scraper').call({
  tickers: ['AAPL'],
  formTypes: ['4'],
  maxFilings: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient

client = ApifyClient('MY-APIFY-TOKEN')
run = client.actor('fetch_cat/sec-form-4-insider-trades-scraper').call(run_input={
    'tickers': ['AAPL'],
    'formTypes': ['4'],
    'maxFilings': 10,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

MCP and AI agents

Use this Actor from Apify MCP Server when an agent needs structured SEC insider-trade rows. Configure the MCP endpoint with:

https://mcp.apify.com/?tools=fetch_cat/sec-form-4-insider-trades-scraper

Add it to Claude CLI with:

claude mcp add apify-sec-form-4 'https://mcp.apify.com/?tools=fetch_cat/sec-form-4-insider-trades-scraper'

JSON config example:

{
  "mcpServers": {
    "apify-sec-form-4": {
      "url": "https://mcp.apify.com/?tools=fetch_cat/sec-form-4-insider-trades-scraper"
    }
  }
}

Example prompts:

  • "Get recent Form 4 insider transactions for AAPL, maximum 10 filings."
  • "Export Form 4 and 4/A rows for CIK 0000320193 with footnotes."
  • "Check AAPL and MSFT insider trades and summarize the transaction codes."

Good agent prompts include the ticker/CIK list, date range, whether derivatives are needed, and the maximum filings per issuer.

Tips for best results

  • Use focused watchlists: Split very large universes into smaller scheduled runs.
  • Keep maxFilings bounded: Start with 10-25 filings per issuer, then increase if needed.
  • Use CIKs for compliance workflows: CIK inputs avoid ticker ambiguity and survive ticker changes.
  • Expect nullable economics: Gifts, grants, and some derivative rows may not report a cash price.

Limits and responsible use

This Actor only extracts official public SEC EDGAR ownership filings. It does not provide investment advice, buy/sell recommendations, AI scoring, private brokerage data, or Congress disclosure data. Use the data for research, compliance, and reporting, and verify important decisions against the linked SEC filing.

Support

If a run does not return what you expected, open an Apify issue and include:

  • the run ID or run URL;
  • the exact input JSON;
  • the expected output;
  • the actual output or empty dataset detail;
  • a reproducible public URL such as an SEC filing URL, plus the ticker or CIK used.

Common questions

Questions and answers reused from the canonical actor README.

Does this Actor give investment advice?

No. It returns structured public filing data only.

Can I input CIKs instead of tickers?

Yes. Use ciks with padded or unpadded SEC CIK values.

Why are price or value fields sometimes null?

Some transaction codes, grants, gifts, or derivative records do not report a cash price.

Where do diagnostics live?

The default key-value store contains RUN_SUMMARY with status, warning, and failure details.