How-to · 3 steps

How to read insider filings
with Monid.

Give this to your agent
$set up https://monid.ai/SKILL.md, then show me the insider filings for <company> and the cost of each step

and let it take it from there.

›what have insiders at this company filed
#JobWhat came backCost
1By tickerworks, so does a name
2By CIKbyte-identical to the ticker
3What they say21 sales, 1 purchase
4The ratio2,504 to 1 by value
5The market feeda ticker, silently dropped
6The real filter14 rows, none under it
7The row limitno endpoint declares one
8The date fieldholds the type as well
9The options onespells it symnbol
10Total10 runs, 3 billed nothing
one company · one cent · a ticker, a CIK or a name all workagent running$0.0700

Real run, 2026-09-25. Public SEC filings.

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.01
What 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.01
What 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.01
What 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.01
What 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.01
What 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.01
What 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
Step 3

Take the cheapest route with Monid.

Everything here is a cent. What varies is whether the parameter you sent was one the endpoint actually declares, because an undeclared one is neither honoured nor refused.

Do you have the CIK · $0.0000
Ticker, CIK or name$0.00all three resolve
Check the name$0.00free either way
What was filed · all one price
Company history$0.01
Market, filtered$0.01
Option grants$0.01
Institutional holders$0.01
Split the fields
Date and type apart$0.00
Which date sorted$0.00filed, or transacted
Back to you
rowfiled bycost
1Company history$0.01
2not found$0.00
3Company history$0.01
4Market, filtered$0.02
5Company history$0.01
5 of 5 rows$0.05
Say this to your agent
>show me what insiders filed at these companies, and say which date you sorted on: <paste CIKs>
“just pass the name”the field called cik resolves a ticker, a CIK or a company name, and the CIK is in the filing url on every row anyway
“count the rows that are yours”an undeclared ticker was silently dropped and two hundred rows of the whole market came back billed, none of them the company asked about
“split the date field”it arrives as a date and a transaction type inside one string
“do not pass a limit”no endpoint here declares one, so it is accepted, ignored, and you get whatever the feed returns

One key. 1,700+ tools.

Sixteen endpoints, two providers, and every single one is $0.01 a call.

One company's Form 4 historysecform4 · $0.01 / call
The market's significant buyssecform4 · $0.01 / call
Insider sales, market widesecform4 · $0.01 / call
13D and 13G filingssecform4 · $0.01 / call
Institutional holderssecform4 · $0.01 / call
Option grants and exercisessecform4 · $0.01 / call
Filter by transaction sizefinviz · $0.01 / call
Screener, movers and sectorsfinviz · $0.01 / call

+ 1,700 more across 55 providers

Browse the catalog →