No endpoints here yet
Check back soon — the catalog grows weekly.
How-to guide
What have this company's insiders been filing?and how much of that feed is not insiders at all
Step 1
Set up Monid.
One line. It installs the CLI and asks for an API key from app.monid.ai. New accounts start with $1.00.
Say this to your agent
>set up https://monid.ai/SKILL.md
Step 2
Pick what you need. Say it in one sentence.
Click a job. Paste the sentence, fill in the brackets.
Everything one company's insiders filed
Say this to your agent
>get the insider trading history for <company> with secform4 on monid. the field is named cik but it resolves a ticker and a plain company name too, so you do not need to look a CIK up first. split the transaction_date field, because it carries the transaction type inside the same string
What the agent runsdone
secform4 /get_company_insider_trading$0.01
secform4 /get_stock_options$0.01
secform4 /get_institution_holders$0.01
secform4 /search$0.01What came backone public company · 2026-09-25
What the filings say, by valueUS dollars disclosed
sales · 21 filings$935,287,758
purchases · 1 filing$373,570
a second company · 12 filingsno purchases at all
the field name lies in your favourit is called cik, and a ticker, a CIK and a plain company name all work: on a second company the ticker returned byte-identical rows to the CIK, and the name returned the same again. An earlier version of this page told readers a ticker 422s, which sent them to buy a lookup they never needed
what arriveseach row carries the date, the type, the role, the share count, the average price and a link to the filing itself; the window and the row count vary by company, 22 filings over nine months on one and 12 over three months on another
the ratio, where there is oneon the first company, $935,287,758 of disclosed sales against $373,570 of disclosed purchases. On a second, every row was a sale, so the ratio has no denominator: report the two sides rather than a multiple
and what that is nota signal. Most insider selling runs on scheduled plans and on tax and diversification needs, so the ratio is a description of the filings and not a view on the company
who fileddirectors, officers and a chief executive, though the role strings are not a controlled vocabulary: across 273 rows on a second company both Ofc and Officer appear, 1 against 56, so normalise the role before you group on it
$0.0122 filings, nine months
The CIK you need and cannot get here
Say this to your agent
>do not go looking for a CIK before you start: the search endpoint in this aisle takes a ticker, a CIK or a company name for a cent, and the company-history endpoint resolves all three itself. if you do want the CIK as a value, it is embedded in the filing url on every row you already bought
What the agent runsdone
secform4 /get_company_insider_trading$0.01
secform4 /get_institution_holders$0.01
secform4 /search$0.01What came backone public company · 2026-09-25
The lookup against the data it unlocksUS dollars
what this page used to send you to$0.0594
the search in this aisle$0.0100
or nothing, from the filing url$0.0000
the resolver was here all alongthe search endpoint in this aisle costs a cent and its own field documentation says it takes a ticker symbol, a CIK number or a company name. On a second company, searching the plain name returned the identical rows the CIK call did
so an earlier version of this page cost readers six times overit said sixteen endpoints and not one resolves a ticker, and sent readers to a $0.0594 lookup in a neighbouring aisle to unlock a $0.01 call. Both of those cents were avoidable
and the CIK is free on every rowit is embedded in the filing url that comes back with each filing, so if you need the number itself you already have it
name the parameterthe search endpoint's field is called query rather than company, and the wrong field name is refused client-side for nothing
but a wrong VALUE is not freea misspelled company name came back with a success status, an empty result array and a $0.01 charge, so the empty answer and the wrong answer cost the same
$0.00the 422s are free
The market feed, and the filter that exists
Say this to your agent
>get recent insider transactions with finviz on monid filtered to a minimum value of <amount>. do not pass a ticker: it is not in the schema, it will not be rejected, and you will be billed for the whole market instead
What the agent runsdone
finviz /get_insider_trading$0.01
secform4 /get_significant_insider_buys$0.01
secform4 /get_insider_sales$0.01
finviz /get_screener_results · not run$0.01What came backone public company · 2026-09-25
Two parameters, one endpointrows returned
min_value · declared, honoured14, none below
ticker · not declared, dropped200, wrong company
the filter works exactlya floor of ten million returned fourteen rows on one run and twenty-two on another, and on both runs not one row sat below the line
the other one does not existthe endpoint declares a single input and additionalProperties false, and a ticker is silently dropped rather than rejected
what that costs youa 200, two hundred rows of the whole market, billed in full, and on a second run not one of the two hundred was the company asked about; an agent asked about one company reaches for exactly this
so count the rows that are yoursnot just the first one. On a second market none of the two hundred rows was the company asked about, so checking row one would have caught it; but a whole-market feed that happens to lead with your company passes a first-row check it should fail. Counting costs the same and cannot clear a bad response
$0.0114 rows, all above the line
How late the filings actually are
Say this to your agent
>when you list insider activity, tell me whether you sorted on the transaction date or the reported date, and give me the gap between them per row. they are different fields and the gap is routinely days
What the agent runsdone
secform4 /get_significant_insider_buys$0.01
secform4 /get_insider_sales$0.01
secform4 /get_company_insider_trading$0.01What came backone public company · 2026-09-25
Days between the transaction and the filingcalendar days, median
significant buys · 20 rows3 days
insider sales · 100 rows2 days
one company · 22 rows2 days
the worst row seen so far303 days
the ruleForm 4 is due within two business days of the transaction, and the response carries both dates so the gap is measurable per row
what we measured, and why the number is not the pointmedians of 2 to 3 calendar days on the first run and 1 day on a second, with maxima of 303, 222 and 98 days across the feeds. The gap is real and its size is not a constant, so measure it on your own rows rather than quoting ours
the honest caveatcalendar days overstate it against a business-day rule, so the narrow claim is the one to make: the reported date is not the transaction date
why it mattersa list titled latest insider activity means two different things depending on which date it sorted on, and nothing in the response picks for you
$0.01two dates, one row
Parse the fields before you trust them
Say this to your agent
>before you summarise any of these rows, split transaction_date into a date and a type, strip the commas and currency symbols from every amount, and tell me if any field name looks misspelled
What the agent runsdone
secform4 /get_stock_options$0.01
secform4 /get_insider_sales$0.01
finviz /get_insider_trading$0.01What came backone public company · 2026-09-25
the date is two fieldstransaction_date arrives as "2026-03-26 Purchase"; across the feeds the embedded type is Purchase, Purchase (A), Sale or Sale (A), and until you split it you have neither
so is the holdingshares_owned arrives as "30,835 (Indirect Direct)", a number and two ownership flags in one string
the misspellingthe options endpoint calls its ticker field symnbol, and symnbol_url with it, and there is no correctly spelled key beside them, so a reader keyed on symbol gets undefined on every row. It is only that one endpoint: the other three spell it properly, which is worse than if they all got it wrong
and its dates are not dateson a second run 16 of 100 option rows carried the bare word Ownership in transaction_date with no date in it at all, and the expiry read "N/A N/A"; every money and share figure across the aisle is a string with commas in it
$0.00work on what you already bought
The limit that is not always a limit
Say this to your agent
>do not pass a row limit to anything in this aisle: no endpoint here declares one, they accept the field without complaint and ignore it, and you get whatever the feed returns. count the rows that came back and budget for the largest response, not for the number you asked for
What the agent runsdone
secform4 /get_significant_insider_buys$0.01
secform4 /get_insider_sales$0.01
secform4 /get_insider_buy_sell_ratios$0.01What came backone public company · 2026-09-25
there is no limit to honournot one endpoint in this aisle declares a row limit. A limit of twenty was accepted without complaint and ignored, returning 73 rows from one endpoint and 100 from another. An earlier version of this page said one endpoint honours it and another does not; neither does
and the field is accepted because nothing checksthese endpoints allow additional properties, so an undeclared parameter is neither honoured nor refused. That is the same shape as the ticker silently dropped two sentences up, and it is the aisle's characteristic failure
why it mattersa job that pages by a limit it assumes was honoured either reads the same rows repeatedly or silently processes several times the data it budgeted for
the flat priceall twenty-one endpoints in this aisle are $0.01 a call, confirmed against the catalog and against every ledger entry, so the row count is the only thing that varies with what you ask for
and one is largethe buy-sell ratio endpoint returned 958,836 bytes for its cent, so summarise it in code rather than handing it to a model
$0.01count the rows yourself
Read more
View all →
Apollo, ZoomInfo and the alternatives
Once a filing names an officer, the company behind them is the next lookup.

When the site will not let you in
For the filing itself, behind a viewer no endpoint parses, a browser reads the page.

Extract page content for RAG
A one-cent call returned 958,836 bytes, which has to be cut down before a model sees it.