TradeStar Insider
Filing-verified SEC EDGAR insider (Form 4), 13D, 13F & 8-K data, no sign-in. Verify any claim.
Installation
Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).
claude mcp add --transport http tradestar-insider 'https://mcp.tradestarinsider.com/mcp'
{
"mcpServers": {
"tradestar-insider": {
"type": "http",
"url": "https://mcp.tradestarinsider.com/mcp"
}
}
}
insider-signals-mcpclaude mcp add tradestar-insider -e 'INSIDER_SIGNALS_MCP_URL=<INSIDER_SIGNALS_MCP_URL>' -- uvx insider-signals-mcp==1.1.0
{
"mcpServers": {
"tradestar-insider": {
"command": "uvx",
"args": [
"insider-signals-mcp==1.1.0"
],
"env": {
"INSIDER_SIGNALS_MCP_URL": "<INSIDER_SIGNALS_MCP_URL>"
}
}
}
}
Variables d'environnement
INSIDER_SIGNALS_MCP_URLOptional override for the remote MCP endpoint (defaults to https://mcp.tradestarinsider.com/mcp).
insider-signals-mcpclaude mcp add tradestar-insider -e 'INSIDER_SIGNALS_MCP_URL=<INSIDER_SIGNALS_MCP_URL>' -- npx -y insider-signals-mcp@1.1.0
{
"mcpServers": {
"tradestar-insider": {
"command": "npx",
"args": [
"-y",
"insider-signals-mcp@1.1.0"
],
"env": {
"INSIDER_SIGNALS_MCP_URL": "<INSIDER_SIGNALS_MCP_URL>"
}
}
}
}
Variables d'environnement
INSIDER_SIGNALS_MCP_URLOptional override for the remote MCP endpoint (defaults to https://mcp.tradestarinsider.com/mcp).
Documentation
Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.
Sommaire
Insider Buy Signals
Verify any U.S. SEC filing claim, field-by-field, against the filing it came from. Every figure here — shares, price, dollar value, percent, stake size — traces to a parsed field in a real EDGAR filing and ships with a link to that filing on sec.gov. Records that can't be linked to a filing are dropped, never guessed: no scores, no unsourced numbers. We call this filing-verified. We also ran the obvious question — does insider buying predict returns? — as four sealed, pre-registered tests. I tried four times to prove otherwise, and four times the data said no; the full record is at https://www.tradestarinsider.com/what-we-tested. This repo is the MIT-licensed MCP server, client library, and worked examples for the TradeStar Insider API.
- Website: https://www.tradestarinsider.com
- MCP server (Streamable HTTP, no auth):
https://mcp.tradestarinsider.com/mcp - REST (OpenAPI 3.0.2): https://api.tradestarinsider.com/v1/openapi.json
- Live status: https://status.tradestarinsider.com
- What we tested (negative results): https://www.tradestarinsider.com/what-we-tested
- GitHub: https://github.com/TradestarV5/insider-signals
- PyPI: https://pypi.org/project/insider-signals-mcp/
- npm: https://www.npmjs.com/package/insider-signals-mcp
- Hugging Face dataset: https://huggingface.co/datasets/tradestarinsider/insider-signals-form4
- Kaggle dataset: https://www.kaggle.com/datasets/tradestarinsider/insider-signals-form4
- RapidAPI: https://rapidapi.com/tradestarinsider-tradestarinsider-default/api/insider-buy-signals1
Free vs paid
The data is the same on every plan. Every row is filing-verified and links to its source on sec.gov. Plans differ in history, volume and export:
| Free | Paid — $29/month | |
|---|---|---|
| Calls | 100 / day | 100,000 / month |
| History | last 30 days | full history to 2024-01-02 + export |
| Verify any filing (free on both plans) | full history | full history |
The free tier serves the last 30 days of filings. Older filings are not hidden: a request for
an older date tells you the filing exists and is on the paid plan — it never claims that no
filing exists. The verify_* tools check any filing across the full history for free. The paid
plan is $29 a month on RapidAPI: 100,000 calls a month and full history since 2024, plus the key
for the paid MCP endpoint from /v1/mcp-key.
(On RapidAPI the free Basic plan is 100 calls a day, or 3,000 calls a month where the console allows only a monthly quota.)
There are two free ways in, each with its own limit: the open, no-key endpoint
(mcp.tradestarinsider.com/mcp and /public/v1) enforces a hard 100 data calls per day per
IP, resetting at 00:00 UTC — over the cap it returns a plain message (a tool result on MCP,
HTTP 429 on REST), never a transport error. MCP handshakes and verify_* checks both behave as
expected (handshakes are free; a verify counts as one call). RapidAPI Basic meters per key
at the same 100 calls/day. Both serve the same 30-day free window.
Full pricing and a key: https://www.tradestarinsider.com/pricing
Run the MCP server locally
The server is published as insider-signals-mcp — a tiny stdio proxy to the remote endpoint.
Run it with no install using uvx:
uvx insider-signals-mcp
To wire it into Claude Desktop, add this to claude_desktop_config.json:
{
"mcpServers": {
"insider-signals": {
"command": "uvx",
"args": ["insider-signals-mcp"]
}
}
}
Or point any MCP client straight at the remote endpoint (no proxy needed):
https://mcp.tradestarinsider.com/mcp (Streamable HTTP, no auth). The verify tools are the
core: check an insider purchase, an activist 13D stake, an 8-K event, or a 13F holding against
its source filing.
What the data is
Five filing-verified families from SEC EDGAR (plus federal contract awards from USAspending):
- Insider Form 4 purchases (SEC transaction code P) — cluster buys (two or more insiders buying the same company inside a window of seven calendar days or fewer) and buys large relative to the insider's existing holdings.
- Activist Schedule 13D stakes, 13F fund position changes, and recent federal contract awards.
Code P does not by itself prove an open-market buy. A purchase filed under P can be an
IPO / offering / private-placement allocation, so every purchase record carries an
offering_context flag (true = allocation, not open-market) and clusters carry a
uniform_price_cluster flag marking a single administered price. Option exercises, 10b5-1
planned sales, and sub-threshold noise (below $50,000) are dropped. Every field we return is
parsed from a real filing and ships with its sec.gov link. Records that can't be linked to a
filing are dropped, never guessed. No scores, no unsourced numbers. We call this filing-verified.
What the data is not
It is not a prediction. We ran four pre-registered, sealed tests for whether insider buying precedes price moves over our own history, and all four returned NULL — no return edge distinguishable from base rate — so we do not claim one. The full record (question, method, sample, number, verdict per test) is public at **What we tested**. This is a clean, filing-verified lookup and verification layer over public purchases — you decide what they mean. It is also not real-time: ingestion is a once-daily weekday cron, so new filings surface next business day, not live.
Coverage
- Insider Form 4 buys: full history 2024-01-02 → 2026-10-09 (686 U.S. trading days),
no non-holiday gaps (market holidays such as Presidents' Day carry no filings and are not
gaps). Read the live number any time at
/v1/health— it is the source of truth and advances every business day. Every served purchase is a filing-verified code-P purchase, never an open-market guess: records that can't be traced to a parsed SEC filing field are dropped, never inferred. - Completeness: we capture 93.70% of in-window code P purchases (lower bound 87.28%); of the filings we skip, only 0.75% (95% CI 0.34–1.63%) turn out to be purchases we genuinely missed — the rest are sales, option exercises, amendments, and sub-$50k buys we exclude by design. (This recall figure is from a sealed, pre-registered 20-trading-day study, 2026-08-17 → 2026-09-14; see **What we tested**.)
Install
pip install insider-signals # or, from a clone: pip install -e .
Zero runtime dependencies — the client uses only the Python standard library.
Quickstart (free, no key)
The free tier answers on the open discovery surface with no key and per-IP rate limiting:
from insider_signals import InsiderSignals
api = InsiderSignals() # public base URL, no key
print(api.health()["datasets"]["insider"]) # coverage days + date range
for s in api.today(): # today's filing-verified buys
print(s["ticker"], s["value_usd"], s["filing_url"])
for s in api.clusters(): # cluster buys (2+ insiders, ≤7 days)
print(s["ticker"], s["cluster_insiders"], s["cluster_notional"])
# Verify a specific claim against the filings we hold:
v = api.verify("ETRA", "ORBIMED ADVISORS LLC")
print(v["status"], v["count"]) # -> confirmed 2
See examples/rest_api.py for a runnable version.
Free tier vs. keyed tier
| Tier | Methods | Access |
|---|---|---|
| Free (no key) | health, today, clusters, verify, verify_13d, verify_8k, verify_13f | Open /public/v1, per-IP rate limited |
| Keyed (RapidAPI) | by_ticker, by_range, filing, fund_changes, federal_awards_recent, activist_stakes_recent, amendments_recent | Metered, through RapidAPI |
For the keyed tier, subscribe on RapidAPI and construct the client with your key:
api = InsiderSignals(base_url="https://<your-rapidapi-host>", rapidapi_key="...")
for s in api.by_ticker("GME"):
print(s["insider"], s["shares"], s["price_per_share"], s["filing_url"])
Calling a keyed method without a key raises InsiderSignalsError with status == 403.
Worked examples — one real request and response per tool
Every response below is a real capture from the live public API, on the free tier (no key).
The two free list tools (today, clusters) were re-captured on 2026-10-21 and show the free
30-day window in their coverage_* fields — a free caller sees exactly this. The verify_*
examples are from an earlier capture (2026-09-23); verification is full-history on every plan, so
their coverage_* fields reflect that capture date and are not clamped to the 30-day window. The
live coverage window moves daily — read /v1/health for the current bounds.
today — today's insider buys
GET https://api.tradestarinsider.com/public/v1/signals/today
{
"api_version": "v1",
"endpoint": "signals/today",
"rule2_guarantee": "Every record traces to a parsed SEC filing field and carries its source filing_url. Records without a filing link are dropped upstream and never returned.",
"count": 0,
"coverage_start": "2026-09-22", "coverage_end": "2026-10-20",
"coverage_note": "Insider (Form-4 code P) signals collected 2026-09-22..2026-10-20. An empty result means no matching filing in this window — not absence at the SEC.",
"total_matched": 0,
"params": { "date": "2026-10-21", "limit": 25 },
"signals": []
}
(An empty set is normal pre-market / on a non-trading day; it repopulates the moment new filings materialize.)
clusters — cluster buys (2+ insiders, one issuer, ≤7 days)
GET https://api.tradestarinsider.com/public/v1/signals/clusters
{
"api_version": "v1",
"endpoint": "signals/clusters",
"count": 1,
"coverage_start": "2026-09-22", "coverage_end": "2026-10-20",
"coverage_note": "Insider (Form-4 code P) signals collected 2026-09-22..2026-10-20. An empty result means no matching filing in this window — not absence at the SEC.",
"total_matched": 177,
"params": { "limit": 1 },
"signals": [
{
"filed_date": "2026-10-19",
"ticker": "APLD",
"issuer_name": "Applied Digital Corp.",
"issuer_cik": "0001144879",
"insider": "Jason Zhang",
"relationship": { "director": false, "officer": true, "ten_pct_owner": false, "officer_title": "President" },
"code": "P",
"shares": 300000.0, "price_per_share": 18.86, "value_usd": 5658000.0,
"transaction_date": "2026-10-16", "acceptance_datetime": "2026-10-19T07:06:33-04:00",
"cluster": true, "cluster_insiders": 2, "cluster_notional": 6664686.12,
"offering_context": false, "uniform_price_cluster": false,
"accession": "0001900445-26-000006",
"filing_url": "https://www.sec.gov/Archives/edgar/data/1900445/000190044526000006/0001900445-26-000006-index.htm"
}
]
}
verify — confirm an insider code P purchase claim
GET https://api.tradestarinsider.com/public/v1/verify?ticker=ETRA&person=ORBIMED ADVISORS LLC
{
"api_version": "v1",
"endpoint": "verify",
"coverage_start": "2026-01-20", "coverage_end": "2026-09-23",
"coverage_note": "Checked SEC Form-4 code P purchases collected 2026-01-20..2026-09-23. Absence here means not in this window — not absence at the SEC.",
"status": "confirmed",
"matched": ["ticker/issuer", "person"],
"filings": [
{
"ticker": "ETRA", "issuer_name": "Electra Therapeutics, Inc.",
"insider": "ORBIMED ADVISORS LLC",
"code": "P", "shares": 1000000.0, "price_per_share": 15.0, "value_usd": 15000000.0,
"filed_date": "2026-09-23", "accession": "0000947871-26-000880",
"transaction_date": "2026-09-19",
"acceptance_datetime": "2026-09-23T18:04:11-04:00",
"aff10b5One": 0,
"is_amendment": false,
"original_accession": null,
"filing_url": "https://www.sec.gov/Archives/edgar/data/2088082/000094787126000880/0000947871-26-000880-index.htm"
}
],
"count": 2,
"message": "Confirmed: 2 matching Form-4 code P purchase filing(s)."
}
A claim with no matching filing returns "status": "not_found" (in-window) or
"out_of_coverage" (outside the collected days) — never a guess.
Purchase record fields. Every confirmed purchase filing — on both verify
(by claim) and the by-accession fetch — carries the same four extra fields, so a
consumer reads one shape regardless of how the row was pulled:
| field | meaning |
|---|---|
transaction_date | the reported transaction date (Form 4 periodOfReport), distinct from filed_date; null when the filing carried no parseable date. |
acceptance_datetime | the EDGAR acceptance timestamp (when the SEC accepted the filing), ISO-8601 with offset; null on rows collected before this stamp was captured. |
aff10b5One | the 10b5-1 trading-plan flag parsed from the Form 4 (1 = filer affirmed a 10b5-1 plan, 0 = not affirmed); null when the raw filing field was unavailable. |
is_amendment / original_accession | is_amendment is true for a Form 4/A; original_accession links it to the original it amends when that filing is in our collected window (SEC Form 4/A carries no native pointer, so the link is by issuer + reporting owner + period), else null. |
Any field that could not be resolved is null and explained under a
partial_fields object (field → reason) on that record — a missing value is never
silent. A record with everything resolved omits partial_fields entirely. Example:
"partial_fields": { "acceptance_datetime": "row collected before the acceptance stamp was captured" }
Form 4/A amendments. When an insider files a Form 4/A that corrects an earlier
Form 4, verify returns the amended filing as the current record — the superseded
original is not returned as a co-equal filing. If your claim cited the figure the
amendment changed, the verdict carries a superseded object naming the
original_accession, the amendment_accession, and the corrected figure, and the
message says the figure was corrected by 4/A. The keyed amendments_recent
(GET /v1/amendments/recent) lists these amendments newest-first, each with its
original_accession and a changed_fields map of what the 4/A changed (before → after);
an amendment whose original is outside our collected window is still listed, flagged
original_in_corpus: false, with the before/after left null — never guessed.
verify_13d — confirm a Schedule 13D activist-stake claim
GET https://api.tradestarinsider.com/public/v1/verify/13d?subject_name=New Fortress Energy Inc.&filer_name=Strategic Value Partners, LLC
{
"endpoint": "verify/13d",
"coverage_start": "2026-06-22", "coverage_end": "2026-09-18",
"status": "confirmed",
"filings": [
{
"filed_date": "2026-09-18", "form_type": "SCHEDULE 13D",
"subject_name": "New Fortress Energy Inc.", "subject_tickers": ["NFE", "NFEGP"],
"filer_name": "Strategic Value Partners, LLC",
"percent_of_class": 14.7, "aggregate_amount_owned": 19208710.0,
"signal": "new_13d_bare", "stated_intent": "New 13D. No activist purpose stated.",
"accession": "0001193125-26-395888",
"filing_url": "https://www.sec.gov/Archives/edgar/data/1749723/0001193125-26-395888.txt"
}
],
"count": 1,
"message": "Confirmed: 1 matching Schedule 13D/13D-A filing(s)."
}
verify_8k — confirm an 8-K material-event claim
GET https://api.tradestarinsider.com/public/v1/verify/8k?cik=1650648&company_name=4D Molecular Therapeutics, Inc.
{
"endpoint": "verify/8k",
"coverage_start": "2025-03-06", "coverage_end": "2026-09-22",
"status": "confirmed",
"filings": [
{
"cik": "1650648", "company_name": "4D Molecular Therapeutics, Inc.",
"accession": "0001193125-26-277563",
"filing_date": "2026-06-22", "event_date": "2026-06-17", "form": "8-K",
"items": [{ "code": "5.07", "label": "Submission of Matters to a Vote of Security Holders" }],
"filing_url": "https://www.sec.gov/Archives/edgar/data/1650648/000119312526277563/"
}
],
"count": 4,
"message": "Confirmed: 4 matching 8-K filing(s) carrying the claimed item(s)."
}
verify_13f — confirm a 13F institutional-holding claim
GET https://api.tradestarinsider.com/public/v1/verify/13f?filer=BERKSHIRE HATHAWAY INC&issuer_name=ALPHABET INC&quarter=2026-06-30
{
"endpoint": "verify/13f",
"coverage_start": "2024-06-30", "coverage_end": "2026-06-30",
"coverage_note": "Values are AS-OF quarter-end and up to ~45 days stale.",
"status": "held",
"filings": [
{
"filer_name": "BERKSHIRE HATHAWAY INC",
"as_of_quarter_end": "2026-06-30", "filed_date": "2026-08-14", "lag_days": 45,
"change": "added", "issuer_name": "ALPHABET INC", "title_of_class": "CAP STK CL A",
"value_usd": 28157599351, "prior_value_usd": 15600071913, "ssh_prnamt": 78791167,
"accession": "0001193125-26-352200",
"filing_url": "https://www.sec.gov/Archives/edgar/data/1067983/000119312526352200/"
}
],
"count": 2,
"message": "Held: 2 matching 13F position(s) reported as of the covered quarter."
}
Response shape
Every data route returns the same envelope; the rows live under signals, and the client's
list-returning methods hand you that list directly. The verify* methods return the full
envelope (you want the status and matched/filings fields).
List controls
Every list route (today, clusters, ticker, range, amendments/recent) accepts the same
optional query parameters. The response echoes the ones you set under params and always reports
total_matched, so you page rather than hit a silent cap.
| param | meaning |
|---|---|
limit | max rows returned (default 25, newest-first); limit<=0 removes the cap. |
offset | rows to skip before this page (pagination). |
days | keep only rows filed within the last N days (relative to today). |
ticker | case-insensitive exact ticker filter. |
as_of | publish-boundary replay. A UTC ISO-8601 instant (or a bare YYYY-MM-DD, read as end-of-day UTC). Returns only rows that had crossed our publish boundary at or before it — the exact feed a client would have seen at that past moment. |
Every listing row carries first_served_at — the UTC ISO-8601 instant that row first crossed our
publish boundary (the atomic write that made it public). It is stamped once, per ingest batch, and
never rewritten, so it is a stable anchor for as_of replay and for measuring publish latency. On
rows materialized before this field existed it is null, explained under partial_fields (and such
rows are kept by an as_of query, since they were already public before the field). as_of is
the companion to days: days bounds the filing date, as_of bounds when we served it.
MCP server (for AI assistants)
Ask an AI client (Claude and other MCP clients) for these signals directly. Open, free, per-IP rate limited — no API key, no OAuth:
claude mcp add --transport http insider-signals https://mcp.tradestarinsider.com/mcp
Then ask: "Show today's insider buy signals" or "Any insider cluster buys this week? Link the
filings." See examples/mcp_client.md for the tool list and a
programmatic SDK example.
Pricing
RapidAPI is the checkout. Two plans: Basic (free) and one $29-a-month plan with 100,000 calls a
month and full history since 2024. After subscribing, call /v1/mcp-key to get your key and both
keyed URLs — the key also unlocks the paid MCP endpoint.
Hard limits, no overage — requests over the cap return 429 until the window resets. The free
discovery surface and the MCP server are open and per-IP rate limited; metered API billing runs
through RapidAPI.
Disclaimer
Information, not investment advice. Every figure is parsed from a public SEC filing and links to its source on sec.gov. Insider buying guarantees nothing — insiders are wrong plenty — but code P purchases are real money on the line.
License
MIT. Changelog: CHANGELOG.md.
Questions fréquentes
Qu'est-ce que TradeStar Insider ?
Filing-verified SEC EDGAR insider (Form 4), 13D, 13F & 8-K data, no sign-in. Verify any claim.
Comment installer TradeStar Insider ?
Il fonctionne comme serveur distant. Dans Claude Code : claude mcp add --transport http tradestar-insider 'https://mcp.tradestarinsider.com/mcp'. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.
Faut-il une clé API pour TradeStar Insider ?
Son entrée au registre n'indique aucune clé ni secret obligatoire. Certaines fonctions peuvent tout de même demander un compte auprès du service auquel il se connecte.
TradeStar Insider est-il open source ?
Oui. Son code est sur GitHub sous licence MIT.
Qui maintient TradeStar Insider ?
Il est publié par TradestarV5. AI.tn le référence sans le maintenir ni le recommander.
Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.