SEC EDGAR Insider Trades (Form 4) & 13F Holdings avatar

SEC EDGAR Insider Trades (Form 4) & 13F Holdings

Pricing

Pay per event

Go to Apify Store
SEC EDGAR Insider Trades (Form 4) & 13F Holdings

SEC EDGAR Insider Trades (Form 4) & 13F Holdings

Pricing

Pay per event

Rating

0.0

(0)

Developer

David-Solal Chalmeau

David-Solal Chalmeau

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Categories

Share

Read the SEC's own filings as flat JSON rows — no API key, no scraping. Two modes:

  • insider — Form 4 (and optionally 4/A, 5, 5/A) transactions for any US issuer: who traded, their role, the date, the code, shares, price, value and their holding afterwards. One row per reported line: transactions and holdings statements, with every reporting owner on joint filings.
  • holdings — the newest 13F-HR of an institutional manager (by period of report, so a late amendment to an old quarter cannot displace the current book): every holding line with CUSIP, shares, reported value, discretion and voting authority. One row per holding line; each row says whether the filing was sliced (truncated, holdingLinesTotal).

Rows are ready for portfolio monitoring, insider-flow research, compliance checks, dashboards or an AI agent.

Example input — insider transactions

{ "mode": "insider", "tickers": ["AAPL"], "maxFilingsPerIssuer": 3 }
{ "mode": "insider", "ciks": ["320193", "789019"], "forms": ["4", "4/A"], "sinceDate": "2026-01-01", "transactionCodes": ["P", "S"], "includeDerivative": false, "maxRows": 300 }

Example input — 13F holdings

{ "mode": "holdings", "ciks": ["1067983"] }

13F mode needs the manager's CIK (a filer code, not a ticker — most 13F managers have no ticker). You can find it on the manager's page at sec.gov/edgar/searchedgar/companysearch.

Example output (real run, one insider row)

{
"mode": "insider",
"ticker": "AAPL",
"issuerCik": "0000320193",
"issuerName": "Apple Inc.",
"ownerName": "Newstead Jennifer",
"ownerCik": "0001780525",
"officerTitle": "SVP, GC and Government Affairs",
"isDirector": false,
"isOfficer": true,
"isTenPercentOwner": false,
"formType": "4",
"filingDate": "2026-10-22",
"periodOfReport": "2026-10-20",
"accessionNumber": "0001140361-26-040540",
"filingUrl": "https://www.sec.gov/Archives/edgar/data/320193/000114036126040540/form4.xml",
"searchedFrom": "2026-10-02",
"fetchedAt": "2026-10-28T10:20:41.026Z",
"rowType": "transaction",
"isDerivative": false,
"securityTitle": "Common Stock",
"transactionDate": "2026-10-20",
"transactionCode": "S",
"transactionCodeLabel": "open market or private sale",
"shares": 2399,
"pricePerShare": 339.62,
"totalValue": 814748.38,
"acquiredDisposed": "D",
"sharesOwnedAfter": 34795,
"directOrIndirect": "D",
"underlyingSecurityTitle": null,
"ownerCount": 1,
"reportingOwners": [
{ "name": "Newstead Jennifer", "cik": "0001780525", "officerTitle": "SVP, GC and Government Affairs", "isDirector": false, "isOfficer": true, "isTenPercentOwner": false }
]
}

Example output (real run, one 13F holding row)

{
"mode": "holdings",
"managerCik": "0001067983",
"managerName": "BERKSHIRE HATHAWAY INC",
"formType": "13F-HR",
"filingDate": "2026-08-14",
"periodOfReport": "2026-06-30",
"accessionNumber": "0001193125-26-352200",
"filingUrl": "https://www.sec.gov/Archives/edgar/data/1067983/000119312526352200/56757.xml",
"searchedFrom": "2013-01-01",
"isAmendment": false,
"issuerName": "ALLY FINL INC",
"titleOfClass": "COM",
"cusip": "02005N100",
"valueReported": 577211815,
"valueUnit": "dollars",
"valueUsd": 577211815,
"shares": 12561737,
"sharesType": "SH",
"impliedPricePerShare": 45.95,
"putCall": null,
"investmentDiscretion": "DFND",
"otherManager": "4",
"votingSole": 12561737,
"votingShared": 0,
"votingNone": 0,
"truncated": false,
"holdingLinesTotal": 89,
"fetchedAt": "2026-10-28T10:20:46.458Z"
}

Fields

Shared by every row: mode, fetchedAt, searchedFrom (the first filing date the run actually read for that target; with sinceDate, the start of the window searched) and the filing context formType, filingDate, accessionNumber, filingUrl (the exact SEC document the row came from).

Insider rows add: ticker, issuerCik, issuerName, ownerName, ownerCik, officerTitle, isDirector, isOfficer, isTenPercentOwner, reportingOwners (every owner on a joint filing), ownerCount, periodOfReport, rowType (transaction or holding), isDerivative, securityTitle, transactionDate, transactionCode, transactionCodeLabel, shares, pricePerShare, totalValue, acquiredDisposed, sharesOwnedAfter, directOrIndirect, underlyingSecurityTitle, truncated, filingLinesTotal.

13F rows add: managerCik, managerName, periodOfReport, isAmendment, issuerName, titleOfClass, cusip, valueReported, valueUnit, valueUsd, shares, sharesType, impliedPricePerShare, putCall, investmentDiscretion, otherManager, votingSole, votingShared, votingNone, truncated, holdingLinesTotal.

Field types are explicit, not all strings: 14 are number, 6 are boolean, reportingOwners is an array, the other 34 are string (the array's elements are {name, cik, officerTitle, isDirector, isOfficer, isTenPercentOwner}), and a field the filing does not state is null, never a guessed value.

Error rows carry input and error instead: TICKER_NOT_FOUND, CIK_NOT_FOUND, NO_FILINGS, NO_13F_FILING, NO_INFORMATION_TABLE, UPSTREAM_FAILED, PARSE_FAILED, SKIPPED_MAX_ROWS. Absence errors (NO_FILINGS, NO_13F_FILING) also carry searchedFrom and name the window in message; SKIPPED_MAX_ROWS names a target that maxRows was reached before, and is free.

Pricing

Pay per event: a small start fee per run, plus one charge per delivered row — one Form 4 / 5 transaction or holding line, or one 13F holding line. Tickers or CIKs that cannot be resolved, filings with nothing to deliver, failed upstream requests and targets maxRows was reached before (SKIPPED_MAX_ROWS) come back as free error rows and are not charged. If your spending limit is reached the Actor stops cleanly instead of running unpaid. Current prices are shown on this page.

Run stats report what the platform actually did: deliveredFree is the shared kit's own counter, and charged is the number of events billed. On an unmonetized run — charging available but returning chargedCount: 0 with no limit — the rows are still delivered and charged is 0 (deliveredFree stays 0, because the kit counts a row it never billed as delivered, not free); read charged, never delivered, to know what you paid for.

Good to know

  • Source: the official SEC EDGAR endpoints data.sec.gov/submissions/CIK##########.json, www.sec.gov/files/company_tickers.json and the filing archives under www.sec.gov/Archives/edgar/data/. No key, no login, no proxy. This Actor is not affiliated with or endorsed by the U.S. Securities and Exchange Commission.
  • Rate limits: the SEC fair-access policy allows 10 requests/second. Requests are made one at a time with a ~130 ms pause and identify the Actor with a descriptive User-Agent plus a contact address, as the SEC requires.
  • Coverage: the submissions JSON lists the ~1,000 most recent filings per CIK. When sinceDate reaches further back than that window the Actor also reads the archived submissions files the SEC lists under filings.files[] (BRK, for example, goes back to 1998), so an old window is answered from the filings that exist — but only the archives whose own filingFrom/filingTo range can hold the window are requested (Vanguard lists 14 of them). Each row states the window it came from in searchedFrom, and a "nothing found" row names the window it searched.
  • 13F values: the reporting unit follows the period of report, not the filing date. Periods before 2023-01-03 report thousands of dollars, periods from 2023-01-03 report dollars. valueReported is the number exactly as filed, valueUnit says which unit it is (thousands, dollars, or null when the period is unknown) and valueUsd is always the normalised dollar figure. impliedPricePerShare is only derived for common shares (sharesType: "SH", no putCall): an option's notional or a debt principal makes value ÷ quantity meaningless, so it is null there.
  • Sliced runs: maxRows caps a run, and a large 13F (Vanguard's current book has 17,686 holding lines) can exceed it. Every delivered row — holding or insider — therefore carries truncated (true when its filing was cut, or when the run stopped at maxRows before finishing the targets/filings it was given) plus the filing's own total: holdingLinesTotal for 13F rows, filingLinesTotal for Form 4 / 5 rows. A target the cap never reached is never dropped silently: it comes back as a free SKIPPED_MAX_ROWS error row naming it, and the run stats count it in skippedTargets. A slice can therefore never be mistaken for the whole answer.
  • Joint Form 4s: a filing can name several reporting owners (a parent and its affiliate). reportingOwners lists all of them with role flags and ownerCount says how many; ownerName/ownerCik/officerTitle/role flags describe the first owner. Form 4s that report only holdings (<nonDerivativeHolding>, <derivativeHolding>) are delivered too, with rowType: "holding" and a null transactionCode.
  • Derivative rows (isDerivative: true, e.g. option exercises and RSU vests) often have pricePerShare: null when the filing gives only a footnote. They are delivered and charged like any other row unless you set includeDerivative: false.
  • forms defaults to ["4"] in insider mode (13F-HR in holdings mode). Amendments are opt-in (4/A, 13F-HR/A).
  • maxFilingsPerIssuer defaults to 10 (hard limit 100); maxRows defaults to 500 (hard limit 5000); up to 50 tickers/CIKs per run. A value above a hard limit is applied as the limit and reported back in the run stats (truncatedInputs), never silently discarded.
  • Insider filings are due within two business days, but filings are filed by companies and individuals: expect occasional corrections, late filings and amendments. Nothing here is investment advice.
  • The reporting owner's street address, which appears in the raw Form 4, is deliberately not copied into the output.