SEC Form 4 Insider Trades Scraper icon

Other

SEC Form 4 Insider Trades Scraper

Transaction-level SEC Form 4 insider-trading data -- who traded, how many shares, at what price, under which transaction code -- parsed straight out of the ownership XML, one row per trade, not one row per filing.

Free Apify credit covers a first run. No credit card to try.

What this Actor scrapes

Every SEC Form 4 filing carries an <ownershipDocument> XML body listing the actual insider trades behind the filing -- who traded, how many shares, at what price, under which transaction code, and what they own afterward. Most EDGAR tooling stops at the filing index (form type, date, accession number); this Actor goes one level deeper and parses that XML directly, resolving tickers to CIKs, walking each issuer's recent Form 4 filings, and emitting one row per buy, sell, award, or option-exercise line item -- joint filings included, with every reporting owner correctly attributed to their share of each transaction.

What we handle for you

  • 🔁 Retries with exponential backoff on 429 / 5xx and honours Retry-After -- we never hammer SEC's servers into a block.
  • 🧱 Rate-limit-aware pacing -- a shared request-interval floor keeps every run inside SEC's ~10 req/s polite-use ceiling, even across concurrent runs.
  • 🧾 Transaction-level parsing, not just a filing index -- every buy, sell, award, and exercise line item, with footnote-only fields honestly reported as null instead of guessed.
  • 🧊 Joint filings handled correctly -- every reporting owner on a multi-owner Form 4 gets attributed rows, never silently dropped.
  • 🧊 Clean, typed dataset rows -- Pydantic-validated, ISO-8601 timestamps, stable accession-number IDs.
  • 💰 Pay-Per-Event pricing -- you only pay for transaction rows that land in your dataset. No data, no charge (beyond the small warm-up fee).

Use cases

  • Insider-trading signal feeds -- quant and fintech shops ingesting transaction-level buy/sell data as a raw factor input.
  • Activist and executive-conviction tracking -- flag large open-market buys (code P) by officers and directors across a watchlist.
  • Equity research workflows -- pull every recent insider transaction for a covered issuer without hand-parsing XML.
  • Financial media and newsletters -- surface notable Form 4 activity (large sells, cluster buying) for a daily brief.
  • Compliance and governance monitoring -- audit officer/director trading windows against blackout-period policy.

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
tickers array yes Ticker symbols (e.g. AAPL) or 10-digit CIKs to sweep for Form 4 insider-transaction filings. We resolve tickers to CIKs via SEC's company_tickers.json.
lookbackDays integer no Only include Form 4 filings with a filing date within this many days of run start.
maxFilingsPerIssuer integer no Cap on the number of Form 4 filings fetched and parsed per issuer -- bounds egress on issuers with heavy insider-trading activity.
includeDerivative boolean no Include derivative-table transactions -- stock options, RSUs, and similar -- as output rows.
includeNonDerivative boolean no Include non-derivative-table transactions -- common-stock buys and sells -- as output rows.
userAgent string no SEC requires a descriptive User-Agent with contact info on every request. Default identifies as Devil Scrapes; replace with your own contact if you want SEC to associate requests with your organisation.
{
  "tickers": [
    "AAPL"
  ],
  "lookbackDays": 30,
  "maxFilingsPerIssuer": 3,
  "includeDerivative": true,
  "includeNonDerivative": true,
  "userAgent": "DevilScrapes-Form4/1.0 (contact: apify.com/DevilScrapes)",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

issuer_cikissuer_nameissuer_tickerowner_cikowner_nameis_directoris_officeris_ten_percent_ownerofficer_titletransaction_datetransaction_codetransaction_code_labelis_derivativesecurity_titleshares_transactedprice_per_share

{
  "issuer_cik": "0000320193",
  "issuer_name": "Apple Inc.",
  "issuer_ticker": "AAPL",
  "owner_cik": "0002148403",
  "owner_name": "Ternus John",
  "is_director": true,
  "is_officer": true,
  "is_ten_percent_owner": false,
  "officer_title": "CEO",
  "transaction_date": "2026-09-01",
  "transaction_code": "A",
  "transaction_code_label": "Grant/award/other acquisition",
  "is_derivative": true,
  "security_title": "Restricted Stock Unit",
  "shares_transacted": 7690.0,
  "price_per_share": null,
  "transaction_value_usd": null,
  "acquired_disposed": "A",
  "shares_owned_after": 7690.0,
  "ownership_nature": "D",
  "indirect_ownership_note": null,
  "underlying_security_title": "Common Stock",
  "underlying_shares": 7690.0,
  "exercise_price": null,
  "exercise_date": null,
  "expiration_date": null,
  "accession_number": "0001140361-26-035362",
  "filed_at": "2026-09-01T18:32:04-04:00",
  "period_of_report": "2026-09-01",
  "source_xml_url": "https://www.sec.gov/Archives/edgar/data/320193/000114036126035362/form4.xml",
  "scraped_at": "2026-09-03T12:00:00+00:00"
}

Pricing

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
Transaction row$0.0025Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

Limitations

  • Form 4 only -- Form 3 (initial ownership) and Form 5 (annual) filings are out of scope.
  • No unbounded historical backfill -- lookback is bounded by lookbackDays and maxFilingsPerIssuer, with older filings pulled from an issuer's overflow submissions pages only as needed to cover the window.
  • No "sweep everything filed today" firehose entry point -- you supply the tickers/CIKs to sweep; there's no reverse market-wide Form 4 stream in v1.
  • Amended filings (form "4/A") are excluded by default.

FAQ

Is this the same as your SEC EDGAR Filings Scraper?
No. That Actor returns one row per FILING (form type, date, accession number) across all SEC form types. This Actor returns one row per TRANSACTION -- parsed out of the Form 4 ownership XML body -- with shares, price, transaction code, and reporting-owner detail that the filing-index Actor doesn't have.
Do I need a SEC EDGAR API key?
No -- SEC EDGAR is free and keyless. It only requires a descriptive User-Agent with contact info, which we supply a sensible default for.
What happens on a joint filing with multiple insiders?
We emit one row per (reporting owner, transaction) pair -- every owner named on the filing is attributed to the transactions in that filing, never silently dropped.
Why is price_per_share sometimes null?
Some Form 4 fields (like a $0 RSU grant price) are only disclosed in a footnote, not the structured <value> element. We report those as null rather than guessing or defaulting to 0.
Do you cover Form 3 or Form 5?
Not in this version -- v1 is scoped to Form 4 only. Form 3 (initial ownership) and Form 5 (annual) filings are a candidate future enhancement.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Related Actors

Teams that run this also run