Overview
Insider Trading works by parsing SEC Form 4 ownership filings for US public companies into clean, normalized transactions and layering on derived intelligence the raw filings do not carry - open-market buy versus sell totals, net insider activity, distinct insiders, and a bullish/bearish sentiment read. Compensation noise like option grants and tax withholding is separated from real open-market signals. Data is refreshed continuously from official SEC filings.
The tool
Once your client is connected to the VerveKit server, this appears in its tool list as InsiderTradingSkill. It is read-only and open-world — it fetches and never mutates anything on your side — so most clients call it without asking you to confirm.
{
"name": "InsiderTradingSkill",
"arguments": {
"ticker": "AAPL"
}
}You do not name the tool yourself; the model picks it. Asking about AAPL in the terms this skill covers is enough for it to reach for InsiderTradingSkill on its own — naming it explicitly also works, and is the way to force the call.
Connecting
One server URL covers every skill in the catalog, including this one. Authorization is OAuth: the client opens a browser once, and there is no key to paste into a config file.
{
"mcpServers": {
"vervekit": {
"url": "https://api.vervekit.com/v1/mcp"
}
}
}https://api.vervekit.com/v1/mcpPer-client setup — Claude, Cursor, VS Code, ChatGPT — is on the MCP setup page.
Arguments
These are the properties on the tool's inputSchema, so a well-behaved client validates them before the call is made. Premium arguments are accepted on every plan but only take effect on plans that include them.
| Argument | Type | Description |
|---|---|---|
tickerRequired | string | Stock ticker symbol (e.g. AAPL, MSFT, ADBE) length 1–6 |
typeOptionalPremium | string | Filter to open-market buys or sells (buy or sell). |
limitOptionalPremium | integer | Number of transactions to return (1-25). Defaults to 5. range 1–25 |
What the model gets back
The result carries a structuredContent object matching the tool's declared outputSchema, so a client reads fields without parsing prose. status is "ok" and error is null on success; a null field means the value was not available for that input, not that the call failed.
{
"status": "ok",
"error": null,
"data": {
"ticker": "AAPL",
"cik": "0000320193",
"company": "Apple Inc.",
"totalRecentForm4": 512,
"count": 5,
"lastTransactionDate": "2025-10-14",
"daysSinceLastTransaction": 64,
"transactions": [
{
"filingDate": "2025-10-16",
"transactionDate": "2025-10-14",
"insiderName": "COOK TIMOTHY D",
"insiderTitle": "Chief Executive Officer",
"relationship": {
"director": true,
"officer": true,
"tenPercentOwner": false
},
"security": "Common Stock",
"transactionCode": "S",
"transactionType": "Sale",
"direction": "sell",
"acquiredDisposed": "D",
"shares": 511000,
"pricePerShare": 245.5,
"value": 125450500,
"sharesOwnedAfter": 3280000,
"accessionNumber": "0000320193-25-000118",
"url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000118/xslF345X05/wf-form4.xml"
},
{
"filingDate": "2025-10-02",
"transactionDate": "2025-10-01",
"insiderName": "MAESTRI LUCA",
"insiderTitle": "Senior Vice President, CFO",
"relationship": {
"director": false,
"officer": true,
"tenPercentOwner": false
},
"security": "Common Stock",
"transactionCode": "S",
"transactionType": "Sale",
"direction": "sell",
"acquiredDisposed": "D",
"shares": 74213,
"pricePerShare": 241.18,
"value": 17899091,
"sharesOwnedAfter": 112884,
"accessionNumber": "0000320193-25-000112",
"url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000112/xslF345X05/wf-form4.xml"
},
{
"filingDate": "2025-08-20",
"transactionDate": "2025-08-18",
"insiderName": "WILLIAMS JEFFREY E",
"insiderTitle": "Chief Operating Officer",
"relationship": {
"director": false,
"officer": true,
"tenPercentOwner": false
},
"security": "Common Stock",
"transactionCode": "P",
"transactionType": "Purchase",
"direction": "buy",
"acquiredDisposed": "A",
"shares": 5000,
"pricePerShare": 226.4,
"value": 1132000,
"sharesOwnedAfter": 489210,
"accessionNumber": "0000320193-25-000101",
"url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000101/xslF345X05/wf-form4.xml"
},
{
"filingDate": "2025-08-04",
"transactionDate": "2025-08-01",
"insiderName": "ADAMS KATHERINE L",
"insiderTitle": "Senior Vice President, General Counsel",
"relationship": {
"director": false,
"officer": true,
"tenPercentOwner": false
},
"security": "Common Stock",
"transactionCode": "A",
"transactionType": "Grant/Award",
"direction": null,
"acquiredDisposed": "A",
"shares": 25000,
"pricePerShare": 0,
"value": 0,
"sharesOwnedAfter": 312450,
"accessionNumber": "0000320193-25-000098",
"url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000098/xslF345X05/wf-form4.xml"
},
{
"filingDate": "2025-08-04",
"transactionDate": "2025-08-01",
"insiderName": "O'BRIEN DEIRDRE",
"insiderTitle": "Senior Vice President",
"relationship": {
"director": false,
"officer": true,
"tenPercentOwner": false
},
"security": "Common Stock",
"transactionCode": "F",
"transactionType": "Tax Withholding",
"direction": null,
"acquiredDisposed": "D",
"shares": 8123,
"pricePerShare": 232.1,
"value": 1885348,
"sharesOwnedAfter": 145200,
"accessionNumber": "0000320193-25-000097",
"url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000097/xslF345X05/wf-form4.xml"
}
],
"summary": {
"totalTransactions": 5,
"distinctInsiders": 5,
"buys": {
"count": 1,
"shares": 5000,
"value": 1132000
},
"sells": {
"count": 2,
"shares": 585213,
"value": 143349591
},
"netShares": -580213,
"netValue": -142217591,
"buySellRatio": 0.01,
"sentiment": "Bearish",
"clusterBuy": false
}
}
}Response fields
Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.
| Field | Type | Example | Description |
|---|---|---|---|
ticker | string | AAPL | Stock ticker symbol for the company |
cik | string | 0000320193 | SEC Central Index Key unique identifier |
company | string | Apple Inc. | Official registered name of the company |
totalRecentForm4 | number | 512 | Total Form 4 filings in the company's recent feed |
count | number | 5 | Number of transactions returned in this response |
lastTransactionDate | string | 2025-10-14 | Date of the most recent insider transaction |
daysSinceLastTransactionPremium | number | 64 | Days since the most recent insider transaction |
transactions | array[5] | Recent insider transactions, most recent first | |
transactions.0.filingDate | string | 2025-10-16 | Date the Form 4 was filed |
transactions.0.transactionDate | string | 2025-10-14 | Date the transaction occurred |
transactions.0.insiderName | string | COOK TIMOTHY D | Name of the reporting insider |
transactions.0.insiderTitle | string | Chief Executive Officer | Role or title of the insider |
transactions.0.relationship | object | {…} | Insider relationship flags (director, officer, 10% owner) |
transactions.0.relationship.director | boolean | true | Whether the insider is a director of the company |
transactions.0.relationship.officer | boolean | true | Whether the insider is an officer of the company |
transactions.0.relationship.tenPercentOwner | boolean | false | Whether the insider owns 10% or more of the company's stock |
transactions.0.security | string | Common Stock | Title of the security transacted |
transactions.0.transactionCode | string | S | SEC transaction code (P, S, A, M, F, ...) |
transactions.0.transactionType | string | Sale | Human-readable transaction type |
transactions.0.direction | string | sell | Open-market direction (buy or sell), when applicable |
transactions.0.acquiredDisposed | string | D | Whether shares were acquired (A) or disposed (D) |
transactions.0.shares | number | 511000 | Number of shares in the transaction |
transactions.0.pricePerShare | number | 245.5 | Price per share for the transaction |
transactions.0.value | number | 125450500 | Total transaction value (shares x price) |
transactions.0.sharesOwnedAfter | number | 3280000 | Shares owned by the insider after the transaction |
transactions.0.accessionNumber | string | 0000320193-25-000118 | SEC accession number for the filing |
transactions.0.url | string | https://www.sec.gov/Archives/edgar/data/320193/000032019325000118/xslF345X05/wf-form4.xml | Direct link to the Form 4 filing |
summary | object | {…} | Derived insider-sentiment summary |
summary.totalTransactionsPremium | number | 5 | Transactions in the summarized window |
summary.distinctInsidersPremium | number | 5 | Number of distinct insiders transacting |
summary.buysPremium | object | {…} | Open-market buy totals (count, shares, value) |
summary.buys.countPremium | number | 1 | Number of open-market buy transactions |
summary.buys.sharesPremium | number | 5000 | Total shares acquired in open-market buy transactions |
summary.buys.valuePremium | number | 1132000 | Total dollar value of open-market buy transactions |
summary.sellsPremium | object | {…} | Open-market sell totals (count, shares, value) |
summary.sells.countPremium | number | 2 | Number of open-market sell transactions |
summary.sells.sharesPremium | number | 585213 | Total shares disposed of in open-market sell transactions |
summary.sells.valuePremium | number | 143349591 | Total dollar value of open-market sell transactions |
summary.netSharesPremium | number | -580213 | Net shares bought minus sold (open-market) |
summary.netValuePremium | number | -142217591 | Net dollar value bought minus sold (open-market) |
summary.buySellRatioPremium | number | 0.01 | Ratio of buy value to sell value |
summary.sentimentPremium | string | Bearish | Insider sentiment read (Bullish, Bearish, Neutral) |
summary.clusterBuyPremium | boolean | false | Whether multiple insiders bought in the window |
Failure modes
Errors come back as tool errors carrying a sentence the model can act on, not a bare status code. Error handling covers the full list.
| Status | What it means |
|---|---|
400 / 422 | The arguments did not validate. The message names the offending one. |
401 | The OAuth session is invalid or expired — reconnect the server. |
403 | Blocked by a key restriction or an IP allow-list. Never a bad identity. |
404 | This skill is not part of VerveKit. Check the catalog. |
429 | Out of credits, or a brief rate limit. The message tells them apart. |
A call costs 6 credits each time the tool actually runs; a model that reasons about the tool without calling it costs nothing.
Other ways to use Insider Trading Skill
Set up Insider Trading Skill on VerveKit, or reach the same source a different way. Your VerveKit account and credits work on all of them — one key, one balance.
Related
More in Finance: