SEC Insider Trading Scraper - Form 4 Insider Trades & Buys avatar

SEC Insider Trading Scraper - Form 4 Insider Trades & Buys

Pricing

$1.80 / 1,000 insider transactions

Go to Apify Store
SEC Insider Trading Scraper - Form 4 Insider Trades & Buys

SEC Insider Trading Scraper - Form 4 Insider Trades & Buys

Scrape SEC EDGAR Form 3/4/5 stock insider trades: insider buying and selling — from the official filings: one flat row per transaction with insider name, role, decoded code, shares, price, signed USD value and shares held after. No API key, no fee. Signed USD separates insider selling from buys.

Pricing

$1.80 / 1,000 insider transactions

Rating

0.0

(0)

Developer

Fetch Smith

Fetch Smith

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Share

SEC Insider Trading Scraper — Form 4 insider trades, buys & sells as flat rows

Reads SEC EDGAR ownership filings (Forms 3, 4 and 5) straight from the SEC's own keyless endpoints and returns one flat row per reported transaction — not one row per filing, and not a PDF link you still have to parse.

Give it tickers (AAPL, NVDA) or raw CIK numbers. Tickers are resolved against SEC's official company_tickers.json map, so an unlisted ticker is skipped with a warning instead of silently returning nothing.

In short: an insider trading API over Form 4 data, callable from Apify without hosting an EDGAR parser yourself.

Why this one

  • Parsed transactions, not filing lists. Most EDGAR Actors hand you an index of 10-K/10-Q/8-K filings. This one opens the raw ownership XML behind each Form 4 and pulls out the trade: who, what role, which code, how many shares, at what price, how many held afterwards.
  • transactionCode is decoded. S → Open-market sale, F → Shares withheld for taxes, M → Option exercise/conversion, and so on for all 20 SEC-defined codes, including the rare O (out-of-the-money option exercise, seen a handful of times per quarter across all filers) and V (voluntarily reported early). The distinction matters: a large F or M row is routine compensation mechanics, not a bearish signal, and treating every disposition as "insider selling" is the single most common mistake in this dataset.
  • transactionValueUsd is signed and pre-computed — negative on a disposition, positive on an acquisition — so you can sum a column without re-deriving the sign from acquiredOrDisposed.
  • Rule 10b5-1 flag and footnotes are carried through, which is how you tell a pre-scheduled plan sale from a discretionary one.
  • No personal addresses. The ownership XML contains the reporting person's street address. This Actor deliberately never emits it. Names, CIKs, roles and officer titles are the public corporate disclosure; the address block is personal data and is not part of this product.
  • The filters run before billing. transactionCodes, minTransactionValue and insiderRoles are applied to each parsed row before it is pushed or charged, so "only open-market buys over $250k by an officer" costs you those rows and nothing else.
  • No API key, no start fee, HTTP only (no headless browser), pay only per transaction row.

Output fields

id, rowType, accessionNumber, formType, isAmendment, amendsOriginalFilingDate, supersedesAccessionNumber, supersedesCandidateAccessions, amendedByAccessionNumber, filingDate, periodOfReport, issuerName, issuerCik, ticker, insiderName, insiderCik, isDirector, isOfficer, isTenPercentOwner, isOther, officerTitle, coFilers, derivative, securityTitle, transactionDate, transactionCode, transactionCodeMeaning, acquiredOrDisposed, shares, pricePerShare, transactionValueUsd, sharesOwnedAfter, directOrIndirect, indirectOwnershipNature, exercisePrice, expirationDate, underlyingSecurityTitle, underlyingShares, rule10b5_1Plan, footnotes, filingUrl, url.

Derivative rows (options, RSUs, convertibles) carry exercisePrice, expirationDate, underlyingSecurityTitle and underlyingShares; non-derivative common-stock rows leave them null. Set includeDerivative: false to get common stock only.

Amendments (4/A) and which filing they replace

SEC does not flag a corrected filing — it publishes the correction as a separate form type (4/A), so a feed that only asks for 4 silently never sees it. Select 4/A in formTypes (alongside 4) to get them. Amendments are real: of the seven large-cap issuers we sampled, six had at least one, and the two we read in full corrected a post-transaction share count and a Rule 10b5-1 plan date respectively — numbers this Actor otherwise reports as fact.

EDGAR's amendment XML names only the date the original was filed (dateOfOriginalSubmission), never its accession number, so linking the two is an inference this Actor makes for you from the issuer's own filing index — at no extra request cost:

FieldMeaning
isAmendmenttrue on 3/A/4/A/5/A rows.
amendsOriginalFilingDateEDGAR's dateOfOriginalSubmission — the filing date of the original, which is normally later than periodOfReport. Never compare it against periodOfReport.
supersedesAccessionNumberThe original's accession, filled only when the match is unambiguous (exactly one filing of that form by that issuer on that date). null otherwise — null means "could not tell", not "no original exists".
supersedesCandidateAccessionsEvery filing that could be the original, so you can check them yourself when the match is ambiguous. Empty on non-amendment rows.
amendedByAccessionNumberSet on an original row when an amendment for the same issuer, insider and period also appeared in this run.

Nothing is dropped: when you select both 4 and 4/A you get the original rows and the correcting rows, with the originals tagged — an audit trail needs both the wrong number and the fix, so we never silently replace one with the other.

Worked examples, both live-verified. Apple's 0000320193-22-000078 (a 4/A filed 2022-08-22, period 2022-08-17) reports its original as filed 2022-08-19; Apple filed exactly one Form 4 that day, so supersedesAccessionNumber resolves cleanly to 0000320193-22-000076 — same insider (Luca Maestri), same period. Tesla's 0000899243-22-021041 (a 4/A filed 2022-06-03) reports its original as filed 2022-05-04, but Tesla filed three Form 4s that day, so supersedesAccessionNumber is null and all three appear in supersedesCandidateAccessions.

The one limit worth knowing, because it is a property of EDGAR and not something any Actor can engineer around: the same insider can file two Form 4s on one day for one period. Robyn Denholm filed both 0000899243-22-016670 and -016671 for period 2022-05-02, and since EDGAR publishes no superseded-accession pointer anywhere, amendedByAccessionNumber will mark both of those originals. Read that field as "a correction touching this issuer/insider/period exists" rather than "this exact row was restated", and use filingUrl to confirm which one moved.

Holdings rows (includeHoldings, off by default)

A Form 3 — and the holdings section of a Form 4/5 — reports a position the insider holds, not a trade, and SEC files those in separate <nonDerivativeHolding>/<derivativeHolding> elements. With includeHoldings off (the default) they are skipped, which means a Form-3-only run returns zero rows; the Actor now warns about exactly that at the top of the run instead of leaving you to guess.

Set includeHoldings: true to get them as extra rows with rowType: "holding" (transaction rows are rowType: "transaction"). On a holding row transactionDate, transactionCode, transactionCodeMeaning, acquiredOrDisposed, shares, pricePerShare and transactionValueUsd are null — there is no trade to report — and the position is in sharesOwnedAfter for common stock or in underlyingShares for a derivative holding such as an RSU award (measured on Apple's September 2026 Form 3s: 1 non-derivative + 7 derivative holding rows per filing, each with the full vesting schedule in footnotes). It is opt-in so that an existing Form 4 caller's row count — and therefore their bill — does not change.

Narrowing the feed (transactionCodes, minTransactionValue, insiderRoles)

Most of a Form 4 feed is compensation plumbing rather than trading: across 8 consecutive Apple Form 4s (17 rows, measured 2026-10-01) the mix was 12 A grants, 2 S open-market sales, 2 M option exercises and 1 F tax withholding. If you only want the sales, three optional filters cut the feed down before anything is pushed or charged:

  • transactionCodes — e.g. ["P", "S"] for open-market buys and sells only. All 20 SEC codes are selectable from the dropdown; the platform rejects anything else before the run starts. One interaction worth knowing: C, X, O, E, H and K are only ever reported on derivative rows, so selecting one of them with includeDerivative turned off matches nothing. The run logs a warning naming the codes, and (verified live, 2026-10-13) the zero-row remedy correctly skips its usual "raise maxFilingsPerIssuer/widen sinceDate" advice in this case — no amount of widening either one can produce a match here.
  • minTransactionValue — a USD floor compared on the absolute value, so a $2M sale (transactionValueUsd: -2000000) passes a 500000 floor exactly like a $2M purchase. Rows with no reportable value — holdings, and grants filed with no price — cannot be shown to clear the floor and are excluded.
  • insiderRoles — any of officer, director, tenPercentOwner, other. Matched against the filing's first reporting owner; on a joint filing the other reporting persons appear in coFilers as names only and are not role-matched.

The filters are combined with AND, and they narrow rows, not filings: maxFilingsPerIssuer still decides how far back the run looks, so a strict filter can return few rows from a filer who simply made no matching trades recently. The run log prints how many rows each run dropped, and says so explicitly when the filters removed everything.

Sample row

{
"id": "0001140361-26-037020-n0",
"accessionNumber": "0001140361-26-037020",
"formType": "4",
"filingDate": "2026-09-17",
"periodOfReport": "2026-09-15",
"issuerName": "Apple Inc.",
"ticker": "AAPL",
"insiderName": "Newstead Jennifer",
"isOfficer": true,
"officerTitle": "SVP, GC and Government Affairs",
"derivative": false,
"securityTitle": "Common Stock",
"transactionDate": "2026-09-15",
"transactionCode": "S",
"transactionCodeMeaning": "Open-market sale",
"acquiredOrDisposed": "D",
"shares": 1438,
"pricePerShare": 330.19,
"transactionValueUsd": -474813.22,
"sharesOwnedAfter": 32914,
"rule10b5_1Plan": true,
"footnotes": "This transaction was made pursuant to a Rule 10b5-1 trading plan adopted by the reporting person on May 5, 2026."
}

Pricing

result — $0.0018 per returned transaction row, no Actor-start fee.

Among listings that specialize in parsed insider-trading output, ryanclinton (52 users, ryanclinton/sec-insider-trading) remains the biggest, charging $0.002 per trade plus a small Actor-start fee — we're ~10% cheaper per row with no start fee at all. Their listing markets "behavioural insider-trading signal classification" (cluster-buy/regime-shift detection) over a 140+ field output schema; the extra fields we sampled at launch (cycle 810) read as speculative/AI-generated Store-listing padding (signalGenome, manipulationResistance, institutionalNarrative) rather than values a buyer could actually trust, so we did not copy them. This Actor instead differentiates on data fidelity: all 20 SEC transaction codes decoded (not just the common ones), a signed pre-computed USD value, the 10b5-1 plan flag normalized across its four real on-the-wire spellings (measured across 210 filings — see Related guides), and sinceDate that follows EDGAR's older paginated filing index instead of stopping at the ~12-month inlined window every other Actor in this niche appears to read from. Re-verified against their live pricing and stats 2026-10-03 — still 52 users at $0.002 per trade plus a $0.00005 Actor-start fee, unchanged since cycle 810's original audit.

By raw user count, several generic multi-filing-type EDGAR scrapers are now bigger than any insider-trading specialist, including ryanclinton — a 97-match, 7-term Store sweep, checked live 2026-10-03 (promoted into bin/niche-size's TERM_VARIANTS this cycle; the single-term auto-sweep had returned only 15), surfaced them. constant_quadruped/sec-edgar-filings-scraper (101 users, 17 new in the last 30 days — the fastest-growing listing in this entire comparison) is on Apify's FREE pricing model ($0/row) and lists "insider trades" among 100+ fields across 10-K/10-Q/8-K/Form 4 filings; constructive_calm/sec-edgar-scraper (58 users) charges $0.0004 per filing fetched (10-K, 8-K, Form 4, 13F, etc. all the same price) plus a $0.01 start fee. Neither beats us on an apples-to-apples basis: both charge per filing fetched, not per transaction parsed — exactly the baseline this README's first "Why this one" bullet already describes, now named and priced. Stated as a break-even ratio rather than a single converted figure (re-verified live 2026-10-07: $0.0004 flat on its primary filing-fetched event, no tiers, 0 drift), constructive_calm's $0.0004/filing beats our $0.0018/transaction once a filing carries more than 0.22 transactions — a break-even below 1.0, so on the per-row rate alone it is cheaper per transaction-equivalent at any filing density, not just for multi-transaction filers like Apple. Its $0.01 Actor-start fee is the real offset: a run costs $0.01 + $0.0004/filing against our $0.0018/transaction with no start fee, so for a single-transaction issuer we are cheaper on any run returning fewer than ~8 rows, and it only pulls ahead on larger batches. Neither decodes transaction codes, signs the USD value, or normalizes the 10b5-1 flag, and a buyer still has to parse the raw filing index or XML themselves to get a trade out of it. constant_quadruped's $0 is unbeatable on sticker price regardless. Two more of the same class, dearer than us either way: benthepythondev/sec-edgar-filings-intelligence (20 users, $0.029 FREE → $0.0203 Diamond per filing row plus AI scoring) and crawlerbros/sec-edgar-scraper ($0.005 start + $0.002 FREE → $0.001 Diamond per filing row — a different listing from the already-named crawlerbros/open-insider-scraper below).

Against the Form 4 niche's established, non-tiered specialists this is still the cheapest per-row listing by a wide margin, re-checked live 2026-10-02 against each rival's current pricing record with no drift from the previous audit (for the tiered and parity-priced specialists that do match or beat it, see the two paragraphs below): scrapemint/sec-form4-insider-tracker charges $0.025 per filing row, scrapers_lat/sec-form4-insider-trades-scraper $0.012 down to $0.0102 on the higher plans, and parseforge/sec-form4-scraper $0.04999 down to $0.03749 plus a $0.005 start fee — 6x to 28x this Actor's $0.0018. The honest comparison is on filters rather than price: scrapemint is the one competitor with a comparable, non-speculative feature list, and the code / minimum-value / role filters above exist because it had them and this Actor did not.

What we do not claim: a Store sweep checked live 2026-10-02 (2 search terms, 20 live listings priced) found jweninger16/insider-trading-monitor on Apify's FREE pricing model — $0/row at any volume, genuinely cheaper than this Actor at every row count. Its own listing describes structured per-trade output (who traded, shares, price, post-trade position) comparable in shape to this Actor's, so it is a real rival, not a shallow clone — we have not inspected its actual output fields closely enough to know whether it decodes all 20 transaction codes, signs transactionValueUsd, or normalizes the 10b5-1 flag's four spellings the way this Actor does. No per-row price can beat $0; the differentiator here stays data fidelity (code decoding, signed value, normalized plan flag, EDGAR pagination past the ~12-month inlined window) rather than price. Also newly priced and disclosed for completeness, all dearer than us: entrepreneurial_lens_ehi/openinsider-scraper (tiered $0.0038 FREE down to $0.00171 GOLD+ — undercuts us only from GOLD+ and up, but scrapes openinsider.com's own generic Title/Url/Description fields rather than parsed EDGAR XML, so it is a narrower/shallower product despite the lower per-row ceiling), its dearer sibling-category listing crawlerbros/open-insider-scraper (same openinsider.com source, $0.005 start + tiered $0.005 FREE down to $0.003 GOLD+ — dearer than us and than entrepreneurial_lens_ehi at every tier), pink_comic/sec-insider-trading-tracker ($0.002/row), bb-tradetec/sec-form4-transaction-normalizer ($0.002/row), great_pistachio/sec-filings-monitor ($0.01/row), gochujang/insider-trading-tracker ($0.002/row), straightforward_hydra/sec-form4-insider-trading-monitor ($0.005/row), neuton/sec-form4-insider-transactions-scraper ($0.004/row), nexgendata/sec-edgar-filings-api (re-verified 2026-10-03; its own marketing covers "Form 4 insider trades, 8-K, 13F... and 20+ more" but the live pricing's only charge event is literally named form-d-filing at $0.05, so Form D is what you're actually billed under regardless of which filing type you pick), andrew_avina/sec-insider-mcp ($0.003/row). None of these beat our price; only jweninger16 and entrepreneurial_lens_ehi (partially) do.

A 7-term niche sweep checked live 2026-10-03 also surfaced saswave/advanced-finviz-scraper ($0.001/row flat — genuinely cheaper than us) for the first time. It is not a competing product: it is a general Finviz.com page scraper ("collect data from public listed companies... for easier analysis and insider trade / news monitoring") where insider-trade data is one scrapeable Finviz page among several, sourced from Finviz's own secondary display rather than parsed EDGAR XML — no transaction-code decoding, no signed USD value, no 10b5-1 flag. Noted for completeness, not folded into the "beats us on price" list above since it is not a Form-4 specialist.

Three Form-4 specialists that match or beat our per-row price, all checked live 2026-10-04 (a re-run of the 7-term sweep now returns 100 matches; these three sat below the top-10-by-users cut that earlier audits stopped at, which is why they are named here for the first time). kenshinsee/sec-form4-recent-updates-scraper and kenshinsee/sec-form4-company-history-scraper are both tiered: $0.002/result on the Free plan, $0.0018 on Bronze — level with us — then $0.0015 on Silver and $0.0012 on Gold/Platinum/Diamond, genuinely cheaper than our flat $0.0018 for any buyer on Silver or above. They are real EDGAR Form 4 parsers, not aggregator wrappers, and between them cover the same two access patterns we do (a recent-filings feed and a per-company history by CIK/ticker); their listings advertise CIK, shares, price and the P/S/M transaction codes, i.e. the three common codes rather than all 20, and neither advertises a signed USD transaction value, a normalized 10b5-1 flag, or filing coverage past EDGAR's ~12-month inlined window. parsebird/sec-insider-scraper charges $0.0018 per insider transaction — exactly our price — plus a $0.00005 Actor-start fee, so it is a hair dearer per run and identical per row; its own listing says it sources from Dataroma, a third-party aggregator of Form 4 data, rather than from the SEC filings themselves, so its coverage and latency are bounded by Dataroma's rather than EDGAR's. Our case against all three is fidelity and coverage, not sticker price: all 20 transaction codes decoded, a signed transactionValueUsd, the 10b5-1 flag normalized across its four on-the-wire spellings, and sinceDate following EDGAR's paginated filing index.

A full-list niche re-sweep (104 matched, up from 100, checked live 2026-10-05) found no new undercutter — the niche's growth since the last full sweep is all 1-3-user churn, every one of it dearer than our flat $0.0018/row. Six more newly-named rivals, all in scope and all dearer: toolstem/toolstem-sec-mcp-server (MCP tool-call pricing — $0.05/call for insider-signal lookups), datasignalslab/sec-form4-insider-buying-clusters ($0.02 per one-time cluster-signal event rather than a per-row charge), george.the.developer/sec-edgar-filing-extractor ($0.005 per filing extracted, not per transaction), khadinakbar/sec-edgar-all-in-one-scraper ($0.005/result flat across nine generic EDGAR modes), seibs.co/sec-edgar-intel ($0.005/filing record plus a $0.01 enrichment charge for Form 4 pattern detection) and alizarin_refrigerator-owner/sec-edgar-api---company-filings-financial-data ($0.01/call plus a $0.1 Actor-start fee). Three more checked and ruled out of scope rather than priced: ryanclinton/company-due-diligence-report and pink_comic/sec-edgar-company-filings (both KYB/company-diligence products with insider trades as one minor field, not Form 4 specialists) and jenko_systems/cvm-insider-358 (Brazil's CVM Form 358 — a different country's regulator, not SEC EDGAR).

A full-cohort sweep of the remaining unnamed niche tail (77 listings, checked live 2026-10-06 — niche-unnamed now matches 108, 33 already named). The ≥3-user cut cleared only xtracto/tipranks-stock-signals ($0.005 start + tiered $0.005→$0.002 per bundled stock-level result covering TipRanks' Smart Score, analyst consensus and sentiment with insider trades as one minor field — dearer than us and a different unit), so per the standing full-cohort rule all 77 were live-priced regardless of user count. Five genuine new per-transaction undercutters, all small (0-2 users): steadydata/sec-insider-trading (tiered $0.001 FREE → $0.00065 Gold+, no start fee, its own listing says "pay per transaction" — the closest feature match found yet, advertising role/title, transaction code, shares, price, value, shares-owned-after, derivative and 10b5-1 flags, i.e. nearly our own differentiator list, though not confirmed to decode all 20 codes or normalize the flag's four spellings); gochujang/sec-insider-trading ($0.00005 start + $0.001 per insider-trade-tracked — 44% cheaper); jungle_synthesizer/sec-insider-trading-crawler ($0.001 per data-record but a $0.10 one-time Actor-start fee — cheaper per row, dearer on a small run); fetch_cat/sec-form-4-insider-trades-scraper ($0.005 start + tiered $0.000575 FREE → $0.00014 Diamond per "insider trade row" — the cheapest per-row ceiling found in this niche to date); supermiojo/insider-trading-monitor (2 runs/30d, $0.0001 start + $0.0015/item). None of the five have been checked for transaction-code coverage, signed USD values, or 10b5-1 normalization beyond what their own listing claims.

Two more are unbeatable on sticker price ($0) but out of scope the same way jweninger16 already is above: constant_quadruped/sec-insider-trading-monitor (FREE pricing model — a different Actor from the already-named 101-user constant_quadruped/sec-edgar-filings-scraper sibling, same owner) and canadesk/sec-edgar-fast (FREE, but a generic multi-filing financial scraper where Form 4 XML parsing is one feature among XBRL financials and 10-K chapter extraction).

Three more charge per filing, not per transaction — the same baseline distinction already drawn against constant_quadruped/constructive_calm above — and a buyer still gets one row per filing, not per trade. Each is quoted below as a break-even ratio (its per-filing rate ÷ our $0.0018/transaction = the transactions-per-filing a buyer needs before it is the cheaper option) rather than as a figure converted at Apple's Apple-specific ~2.1 ratio; all three rates re-verified live 2026-10-07 with 0 drift. mikee368/sec-edgar-filings-watch ($0.001/filing flat, no start fee — break-even 0.56, does parse owner/role/code/shares/price/holdings-after), getascraper/sec-form4-insider-monitor ($0.00005 start + tiered $0.00175 FREE → $0.0016 BRONZE → $0.00146 SILVER → $0.00131 GOLD/PLATINUM/DIAMOND per "Form 4 filing with transactions" — break-even 0.97 at FREE down to 0.73 at GOLD+; part of a marketed four-signal suite bundling Congress-trade and short-interest data, not an insider-trading specialist) and mina_safwat/sec-filings-scraper ($0.00005 start + $0.001/filing row across 10-K/10-Q/8-K/Form 4 generically, same class as constant_quadruped — break-even 0.56). Every one of those break-evens sits below 1.0, so unlike the per-filing rivals in the break-even paragraph further down, these three stay cheaper per transaction-equivalent even for the single-transaction issuers that ratio measurement found to be common — our case against them is one row per filing versus one per decoded trade, not price.

Two have a different output granularity entirely and are excluded from the price comparison, not just dearer: johnveds15/sec-form4-insider-clusters ($0.0004/cluster) returns one row per cluster of several insiders buying together, not one row per transaction; jovian_zabra_nk5/sec-edgar-insider-trading ($0.0015/filing) returns filing-index metadata only — issuer, filer, dates and a link — with no shares, price, code or value fields at all, so it isn't a transaction-data product despite the title. Two MCP servers from the same owner (red.cars/sec-edgar-intelligence-mcp, red.cars/sec-form-4-insider-tracker) bundle Form 4 with 10-K/10-Q/8-K access behind a $0.00001-per-dataset-item charge that can't be read as a comparable per-transaction price from the listing alone — not disclosed either way. The remaining 65 of 77 are dearer than our flat $0.0018/row at every tier.

A full-cohort re-sweep of the unnamed niche tail (60 listings, checked live 2026-10-06 — niche-unnamed now matches 106 of 250 seen, 48 already named). Not one listing in the tail cleared 2 users, so per the standing full-cohort rule all 60 were live-priced across every plan tier of every charge event regardless of user count, rather than cut at a user threshold. Our own price was re-verified against the live record first: flat $0.0018/result, no start fee, no tiers, unchanged. One unit-matched new undercutter, plus two per-filing rivals whose advantage is filing-density-dependent (corrected 2026-10-07: this paragraph originally called all three outright undercutters, having converted the two per-filing rates at the ~2.1-transactions-per-filing ratio that the break-even paragraph below measured to be Apple-specific; all three price maps re-verified live 2026-10-07 with 0 drift, and the corrected reading is less favourable to both per-filing rivals, not more). codecraftco/sec-insider-trades (listed 2026-09-26, $0.00005 start + tiered $0.003 Free → $0.0015 Bronze → $0.0014 Silver → $0.0012 Gold/Platinum/Diamond per fully-parsed Form 4 transaction — dearer than us on Free, cheaper at every paid tier; unit-matched to ours exactly, and its own listing advertises transaction codes, 10b5-1 flags, reporter role and post-transaction holdings, so it is the closest feature claim in this sweep, though nothing confirms it decodes all 20 codes or normalizes the plan flag's four on-the-wire spellings); datalayer/insider-trading-form4 (no start fee, tiered $0.002 Free → $0.0018 Bronze (level with us) → $0.0016 Silver → $0.0014 Gold+ per filing — as a break-even ratio that is 1.11 transactions/filing at Free, 1.00 (an exact tie) at Bronze, 0.89 at Silver and 0.78 at Gold+, so for the single-transaction filings that MSFT and JPM returned throughout the ratio sample below it is dearer than us on Free, exactly level on Bronze, and undercuts unconditionally only from Silver up; it is also the first rival found that claims full transaction-code decoding rather than just the common P/S/M codes, its listing saying it "decodes all 19 codes" against the 20 this Actor decodes, so on this niche's main fidelity differentiator it is the nearest competitor named to date); and humble-echidna/sec-edgar (listed 2026-09-29, $0.00005 start + tiered $0.002 Free → $0.0018 Bronze → $0.0016 Silver → $0.0014 Gold/Platinum/Diamond per filing of any form type — 10-K/10-Q/8-K/Form 4/13F/Form D/S-1 all billed identically, i.e. the same per-filing-not-per-transaction class already described against constant_quadruped/constructive_calm above, and tier-for-tier the same price map as datalayer, so the same break-even ratios apply: 1.11 / 1.00 / 0.89 / 0.78, dearer than us on Free and level on Bronze for a single-transaction filing, and one row per filing rather than per trade either way).

Two more are cheaper than us on a unit-matched basis but out of scope for the price list, and are named here rather than folded into it. scrapesage/finviz-scraper (no start fee) carries a dedicated insiderTransaction charge event — one insider transaction with ticker, insider name and relationship, date, type, price, shares, value, holdings-after and a link to the Form 4 — priced tiered $0.003 Free → $0.00256 Bronze → $0.0021 Silver → $0.00166 Gold → $0.00114 Platinum → $0.00075 Diamond, so it undercuts our flat $0.0018 from Gold up; it is out of scope exactly the way saswave/advanced-finviz-scraper already is above — the data is read off Finviz.com's own secondary display, not parsed EDGAR XML, so there is no transaction-code decoding, no signed USD value and no 10b5-1 normalization behind it. jdepablos/insider-trading-feed bills on a different unit entirely: its primary event is $0.015 per company scanned plus a $0.005 Actor-start event, with the dataset rows themselves priced at a nominal $0.00001 — so a one-company run costs ~$0.02 flat however many trades come back, which beats our $0.0018/row only once that company has more than ~11 Form 4 transactions in the requested window, and is dearer than us for anything smaller. It is not a flat undercutter and is not counted as one.

The remaining 55 of the 60 are dearer than our flat $0.0018/row at every tier of every charge event — the tail's modal price is $0.005/row, and the dearest listings in it (nerolabs/sec-edgar-filing-monitor, nexgendata/sec-form-4-insider-monitor) charge $0.1 per row or per monitor run, ~55x our rate.

A fresh full-cohort re-sweep of the unnamed tail (55 listings, checked live 2026-10-07 — niche-unnamed now matches 108 of 254 seen, 53 already named). Our own price was re-verified against the live record first: flat $0.0018/result, no start fee, no tiers, unchanged. All 55 were live-priced across every plan tier of every charge event, with the reserved apify-actor-start key and every other one-time event excluded from the per-row rate rather than folded into it. Not one of the 55 undercuts our $0.0018 on its own per-row rate at any tier — the cheapest unit-matched per-transaction rivals in the tail sit at $0.002 (digital_influx/sec-insider-trades, texxupport/sec-insider-trade-alerts, pappy-dev/sec-form4-insider-trading, all explicitly billing one insider transaction row), and the tail's dearest are titan_coder/sec-form4-cluster-buy-monitor ($0.05) and nexgendata/china-ashare-insider-trades / nexgendata/eu-mar-insider-transactions-tracker ($0.1, and both a different regulator's disclosures entirely).

Three of the 55 charge per filing rather than per transaction (all three price maps below checked live 2026-10-07), which is the only way a dearer-looking sticker price can still beat ours — and this sweep measured that the conversion ratio is issuer-dependent, which is why every per-filing rival on this page is now quoted as a break-even ratio rather than as a converted price. ponderable_hydrometer/sec-edgar-scraper (3 users, $0.00005 start + $0.003 flat) states "one flat row per filing" in its own README and returns filing metadata and document URLs only — no owner, shares, price or transaction code — so it is the constant_quadruped/constructive_calm class again, not a substitute for a parsed trade. tagadanar/sec-edgar-monitor ($0.001 start + tiered $0.005 FREE → $0.0045 BRONZE → $0.004 SILVER → $0.0035 GOLD/PLATINUM/DIAMOND) does bill "per filing returned with its parsed data", plus a separate $0.021–$0.03 one-time digest event in monitor mode. muhammadafzal/sec-edgar-scraper (1 user, $0.005 flat start at every tier + tiered $0.004 FREE → $0.0039 BRONZE → $0.0038 SILVER → $0.0032 GOLD+ "per schema-validated filing or record") spans 10-K/8-K/Form 4/13F generically. Rather than restate a single converted figure, the honest form of the comparison is the break-even ratio: each of these beats our $0.0018/transaction only once a filing carries more than its own rate ÷ $0.0018 transactions — 1.67 for ponderable_hydrometer, 1.94 for tagadanar at GOLD+ (and never at FREE/BRONZE/SILVER, where it needs 2.2–2.8), and 1.78 for muhammadafzal at GOLD+ (SILVER's $0.0038 is a near-exact tie at 2.11, before its $0.005 start fee).

The ratio itself, re-measured live (verified 2026-10-07), is not a constant, and the "~2.1 transactions per filing" figure used elsewhere on this page is an Apple-specific average, not a niche-wide one. A capped run over Apple's four most recent Form 4s returned 8 transaction rows from a single accession (0001140361-26-038674, Tim Cook — one option exercise, one tax-withholding, four separate open-market sales at different prices, and a gift, all decoded), while a capped run over Microsoft's and JPMorgan's four most recent Form 4s each returned exactly one transaction row per filing (8 rows, 8 distinct accessions). So for a single-transaction issuer — which both MSFT and JPM were across this sample — every per-filing rival's per-transaction cost is simply its sticker price, and all three above are then dearer than our $0.0018, not cheaper. Per-filing pricing only beats ours for buyers tracking multi-transaction filers like Apple. As of 2026-10-07 no comparison on this page converts a per-filing rate at ~2.1x any more: every per-filing rival above is stated as a break-even ratio instead, so a buyer can apply their own filers' filing density rather than inherit Apple's. That re-statement moved two rivals out of the "undercutter" reading entirely — datalayer/insider-trading-form4 and humble-echidna/sec-edgar both break even at 1.11 transactions/filing on Free, i.e. dearer than us for a single-transaction filing — and left the four sub-1.0 rivals (constructive_calm, mikee368, getascraper, mina_safwat) cheaper on the per-row rate at any density, which the ratio was never what decided.

A full-cohort re-sweep of the unnamed tail (46 listings, checked live 2026-10-08 — niche-unnamed now matches 108 of 256 seen, 64 already named). Our own price was re-verified against the live record first: flat $0.0018/result, no start fee, unchanged. Only sutraflow/sec-insider-trading-signals (2 users as of 2026-10-16, down from 3) cleared the usual ≥3-user floor at the time of that sweep and bills $0.01 start + $0.01 per insider-transaction — dearer than us. The remaining 45 (0-1 users each) were all live-priced across every charge event and tier regardless; their per-row rate is dearer than ours at every tier too, modal price ~$0.003-$0.005/row, consistent with every prior sweep on this niche. Two are a shape worth flagging rather than filing under "dearer," though, because — like the per-filing rivals above — their price is volume-dependent rather than a flat per-row comparison: m_ctim/insider-trading-alert charges one flat insider-search fee ($0.007 FREE → $0.0055 DIAMOND) regardless of how many transactions that search returns, breaking even against our $0.0018/row at 3.1-3.9 rows — below the 8 rows this page's own Apple sample pulled from one accession; zinin/insider-trading-tracker charges per ticker delivered ($0.005 FREE → $0.004 DIAMOND) covering that ticker's "bounded Form 3/4/5 activity" rather than per row, breaking even at 2.2-2.8 rows/ticker — again below Apple's 8, though above the single row MSFT and JPM each returned. Neither is a confirmed undercut: both sit at 1 user and neither's own listing claims the 20-code decode, signed value, or 10b5-1 normalization this Actor leads on, and both lose to us on any issuer with the low per-filing activity this page's own MSFT/JPM sample found typical. Noted because a buyer who only ever pulls high-activity issuers like Apple would pay less at either one than here.

Fifth full-cohort resweep (43 unnamed listings, checked live 2026-10-09 — niche-unnamed now matches 108 of 256 seen, 68 already named). Our own price was re-verified against the live record first: flat $0.0018/result, no start fee, unchanged. Not one of the 43 cleared the usual ≥3-user floor (all sit at 1-2 users), so per the standing full-cohort rule all 43 were live-priced regardless, across every charge event and tier. 0 of 43 undercut us — the two closest, dobus/sec-filing-events-insider-signals ($0.002/row flat) and devilscrapes/sec-form-4-insider-trades-scraper ($0.0025/row flat), are both dearer on the per-row rate alone and carry a $0.01 and $0.20 one-time Actor-start fee respectively on top; the rest sit at $0.003-$0.025/row, consistent with every prior sweep's modal range on this niche. No new rival worth naming.

Notes on the source

  • Filings older than June 2003 are not machine-readable at all, and this Actor says so rather than miscounting them as holdings-only. SEC only mandated the <ownershipDocument> XML schema this parser reads from mid-2003; everything older is plain SGML/HTML — verified live against Apple's own 2003-03-21 Form 4 (accession 0001104659-03-004723), whose primaryDocument is an <html> table with no ownership XML anywhere. A run that pages back that far (very old sinceDate, or a high maxFilingsPerIssuer on a thinly-traded issuer) skips those filings and logs a warning naming them as unparseable legacy filings, distinct from the holdings-only warning below — they are never silently miscounted as zero-transaction filings.
  • Form 3 is an initial statement of holdings and Form 5 an annual catch-up. A Form 3 never contains a transaction element at all (verified across Apple's four most recent Form 3s: 0 transactions, 1–2 non-derivative and 2–7 derivative holdings each), so with the default includeHoldings: false a Form-3-only run yields zero rows — turn includeHoldings on to get those positions. Form 5 does carry real transactions.
  • A filing can be made jointly by several reporting persons. The first is used for the insiderName/role fields and the rest are listed in coFilers rather than dropped.
  • SEC's filing index is newest-first, so sinceDate stops paging as soon as it passes the date.
  • sinceDate reaches past EDGAR's inlined filing window, which matters for prolific filers. EDGAR's per-issuer submissions file inlines only the larger of ~1000 filings or the trailing 12 months; everything older lives in separate paginated index pages. For a heavy filer that window is shallow in time — JPMorgan carries ~26,000 filings in it spanning just one year — so reading only the inlined window would answer sinceDate: "2024-01-01" with nothing before late 2025 and no indication anything was missing. This Actor follows the older index pages, skipping any page whose date range ends before sinceDate without fetching it, up to 30 pages per issuer (it logs a warning naming the oldest date actually reached if it hits that ceiling). Measured on JPMorgan Form 4s with sinceDate: "2024-01-01", maxFilingsPerIssuer: 200: the inlined window alone yields 134 filings and stops there; following the older pages reaches the full 200 requested after 8 of them. Peak memory for that run was 92 MB.
  • rule10b5_1Plan is normalized across four different spellings. Measured over 210 real Form 4 filings from 15 large-cap issuers, the <aff10b5One> element came back as 0 (167 filings), 1 (27), true (9) and false (7) — 92% of filings use 1/0, not true/false. A hand-rolled === 'true' check therefore reports 75% of genuine plan-based trades as discretionary, silently and in the misleading direction. This Actor accepts both spellings. The element was present on all 210 filings and always at document level (never inside transactionCoding, never with conflicting values), so the flag applies to every row of a filing.
  • A third of rows carry no USD value, and which ones is predictable. In the same 479-row sample, 155 rows (32.4%) had a price of 0 or no price element, so transactionValueUsd is null. Sales (S, 215/215) and tax withholding (F, 36/36) always priced; gifts (G, 0/12), conversions (C, 0/4) and J never; option exercises (M, 34/101) and grants (A, 31/98) about a third of the time — no money changed hands, so there is no price to report. Filter on transactionCode for the behaviour you mean rather than on transactionValueUsd > 0, which drops those rows. Genuine open-market purchases (P) were 6 of 479 rows (1.25%).
  • Measured across 160 real Form 4 transactions from 11 large-cap issuers (MSFT, ADBE, ORCL, CRM, NOW, IBM, META, TSLA, AMZN, GOOGL, NVDA): exercisePrice was populated on 15/33 (45%) of derivative rows — the rest were RSU vests, which have no strike price — while expirationDate and coFilers were both 0% in this sample. RSU-heavy mega-cap grants rarely carry an expiration date, and none of the 11 issuers sampled had a jointly-filed Form 4 in the window checked; both fields do populate on option grants and family/trust co-ownership filings, just not reliably at large tech issuers. Set includeDerivative: false if you only need the common-stock rows.
  • indirectOwnershipNature is null exactly when directOrIndirect is "D", and that split is issuer-dependent, not a data gap. Measured across 85 ownership entries from 42 real Form 4s (AAPL, MSFT, NFLX, WMT, EL, F — 2026-09 through 2026-10): 22.4% (19/85) were "I" (indirect — held via a trust, LLC or family member), and indirectOwnershipNature was populated on 100% (19/19) of those. The split is heavily issuer-dependent: Ford (family trust holdings) came back 14/18 indirect, Walmart (Walton family trusts) 5/11, while Netflix and Microsoft in this sample were 0/7 and 0/7 — all-insider-owns-directly issuers exist and are common among large-cap tech. If your tickers skew tech, expect this field mostly null; it is not unreliable, the underlying filings are mostly Direct ownership for those issuers.

FAQ

I set recordType-style input to a Form-3-only ticker and got zero rows — is that a bug? No. A Form 3 is an initial holdings statement, not a trade, so it has no transaction element at all (verified across Apple's four most recent Form 3s: 0 transactions, 1–7 holdings each). With includeHoldings off (the default) a Form-3-only run has nothing to return. Set includeHoldings: true to get the positions as rowType: "holding" rows.

Why is transactionValueUsd null on some rows? Only when no money actually changed hands — gifts (G), conversions (C) and J rows never carry a price; option exercises (M) and grants (A) carry one about a third of the time (measured over 479 real rows). Sales and tax withholding always price. Filter on transactionCode for the behaviour you mean, not on transactionValueUsd > 0, which silently drops those rows.

Can I trust rule10b5_1Plan even though SEC's own filings don't agree on how to spell it? Yes — this Actor normalizes all four on-the-wire spellings (0/1/true/false, measured 92% 1/0 across 210 filings) into one boolean, so you don't need to handle the spelling yourself.

I filtered transactionCodes to a derivative-only code with includeDerivative: false and got nothing — why? C, X, O, E, H and K only ever appear on derivative rows, so turning derivative rows off removes every row those codes could match. The run logs a warning naming the codes; widening sinceDate or raising maxFilingsPerIssuer won't fix it — turn includeDerivative back on instead.

Does the output include the insider's home address? No, deliberately. The ownership XML contains it, but this Actor never emits it — only the public corporate-disclosure fields (name, CIK, role, title) are in scope.

Why do some issuers return 8 transaction rows per filing and others return exactly 1? It's issuer-dependent, not a bug. A capped sample of Apple's most recent Form 4s returned 8 rows from one filing (multiple sales, an exercise and a withholding, all on one accession); the same sample for Microsoft and JPMorgan returned exactly 1 row per filing. If you're estimating cost per filing, use your own issuers' density, not a fleet-wide average — see the per-filing competitor comparisons above for why that matters when comparing prices.

The run said "Succeeded" but my dataset is empty — how do I find out why? Read the run's status message: a run that delivers zero rows now ends with a one-line explanation naming the cause it actually hit, visible on the run in Console and as statusMessage on the API's run object (no need to read the log). It distinguishes the cases that need different fixes: filters dropped every parsed row (it names the active filters and their counts), no filings of that form exist in the window searched, the tickers didn't resolve to a CIK, every selected filing was holdings-only or a pre-2003 legacy filing, a derivative-only transactionCodes selection with includeDerivative off, or the run hitting its time budget before any row was delivered (that last one is not a "no match" answer — raise the timeout rather than widening dates). The input-shaped causes (derivative-only codes, Form-3-only with holdings off, empty/unresolved issuers) are independent of each other and named together when more than one applies in the same run, rather than only the first.

Does sinceDate miss older filings for a prolific filer? No — EDGAR's own per-issuer submissions file only inlines the larger of ~1000 filings or the trailing 12 months; this Actor follows the older paginated index pages too (up to 30 per issuer), so a heavy filer like JPMorgan (~26,000 filings/year in the inlined window alone) doesn't silently stop at whatever the inlined window covers.

Does this Actor pick up corrected Form 4/A amendments? Yes — select 4/A in formTypes. EDGAR files an amendment under its own distinct form-type string ("4/A", not a flag on the original), so it is opt-in rather than automatic, and the default (["4"]) still returns originals only so existing runs and bills are unchanged. Amendment rows carry isAmendment, amendsOriginalFilingDate and supersedesAccessionNumber, and the original they correct is returned too, tagged with amendedByAccessionNumber — see Amendments and which filing they replace for how the linking works and where it can only narrow to a candidate set. Background and the live survey that prompted this: the dedicated post.

Source code: https://github.com/Fetchsmith/fetchsmith/tree/main/actors/sec-insider-trades-scraper