sec-8k-events
Skill0 starsChanged 36 days agoMITView on GitHub
Reads SEC 8-K filings from public EDGAR endpoints with no login and no API key, and filters them by 8-K item type such as 5.02 officer changes, 1.01 material agreements or 4.02 restatements, for all companies in a date range or for one company. Use when the user asks which companies filed an 8-K with a given item, for recent officer or director changes, bankruptcies, auditor changes or delisting notices, or for the 8-K history of one ticker. Not for the text of filings, not for 10-K or 10-Q data, and not for trading advice.
In this repository36 other files it gives its agents.
- sec-13f-holdingsSkill
- airport-reference-dataSkill
- ai-web-scraperSkill
- background-remover-localSkill
- bulk-image-downloaderSkill
- city-building-permitsSkill
- cve-kev-epssSkill
- doaj-open-access-apiSkill
- document-to-markdownSkill
- eu-funding-callsSkill
- ecb-exchange-ratesSkill
- federal-register-rulesSkill
- french-company-searchSkill
- gleif-lei-change-watchSkill
- image-metadata-exifSkill
- lighthouse-auditSkill
- nfl-games-lookupSkill
- openfda-drug-recallsSkill
- football-fixtures-lookupSkill
- oracle-recruiting-jobsSkill
- pdf-text-extractorSkill
- arxiv-preprint-metadataSkill
- public-holidays-lookupSkill
- pubmed-paper-metadataSkill
- raised-and-hiring-signalsSkill
- recruitee-jobsSkill
- remote-job-feedsSkill
- sec-company-financialsSkill
- sec-edgar-filings-lookupSkill
- seo-audit-toolSkill
- teamtailor-jobsSkill
- treasury-fiscal-dataSkill
- uk-companies-house-lookupSkill
- uk-visa-sponsor-registerSkill
- us-state-business-entity-searchSkill
- video-scene-keyframesSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 99
Do not send the items parameter and trust it.
- Distinctive: line 100
Do not copy names of people from filing text into your answer unless the user needs them and has the right to use them.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
SEC 8-K events by item
Reads two public SEC endpoints. They need no credentials. SEC says on its webmaster page: "We allow scripted access to sec.gov content" and "All Government-created content on sec.gov and EDGAR public filing content are free to access and reuse." Its access policy says: "Current max request rate: 10 requests/second." and "Please declare your user agent in request headers". It also says: "The SEC does not allow botnets or automated tools to crawl the site." Make a few targeted requests, not a crawl.
Author: Don Mangu (GitHub). This skill needs no token. For scheduled runs, item labels, a CSV or JSON export and many companies at once, the author also runs a paid hosted version on the Apify Store: SEC 8-K Filings API (disclosure: the author owns it). You never need it for the steps below. This is an unofficial tool and is not affiliated with the U.S. Securities and Exchange Commission.
Example prompts
- "Which companies filed an 8-K with item 5.02 (officer or director change) this week?"
- "Show Apple's 8-K filings that report results of operations."
- "Any 8-K with item 4.02 (non-reliance on financial statements) in the last month?"
Out of scope: "Should I buy or sell this stock?" The skill lists filings. It gives no investment advice and does not read the filing text.
Step 1: know the item codes
Form 8-K reports an event under numbered items. The common ones: 1.01 entry into a material agreement, 1.02 termination of one, 1.03 bankruptcy or receivership, 2.01 completion of an acquisition or disposition, 2.02 results of operations, 2.05 exit or disposal costs, 2.06 material impairment, 3.01 delisting notice, 4.01 auditor change, 4.02 non-reliance on past financial statements, 5.01 change in control, 5.02 departure or appointment of directors and officers, 5.07 shareholder vote results, 7.01 Regulation FD disclosure, 8.01 other events, 9.01 financial statements and exhibits. Most filings also carry 9.01.
Step 2: pick the endpoint
- All companies in a date range:
https://efts.sec.gov/LATEST/search-index?forms=8-K&dateRange=custom&startdt=YYYY-MM-DD&enddt=YYYY-MM-DD&from=N. Each hit has_sourcewithitems(list of codes),file_date,form,adsh(accession number),ciks,display_namesandperiod_ending. A page holds 100 hits. Page withfrom. The index refusesfromabove 9,900 (limit 10,000), so read long ranges in windows of 7 days. The search has no acceptance time. It also returns 8-K/A amendments underforms=8-K, so checkform. - One company:
https://data.sec.gov/submissions/CIK##########.json(CIK padded to 10 digits).filings.recentholds parallel lists:form,items(a text such as "2.02,9.01"),filingDate,acceptanceDateTime,accessionNumber,primaryDocument. Older filings sit in the files named infilings.files.
Step 3: fetch and filter
import json, time, urllib.request, urllib.parse
# Say who you are. Put your own tool name and your own contact here.
UA = "MyResearchTool/1.0 (contact: you@example.com)"
WANT = {"5.02"} # item codes to keep
START, END = "2026-10-05", "2026-10-09"
def get(url):
time.sleep(0.25) # at most 4 requests per second (SEC limit is 10)
req = urllib.request.Request(url, headers={"User-Agent": UA, "Accept-Encoding": "identity"})
return json.load(urllib.request.urlopen(req, timeout=30))
# Market-wide: read every 8-K of the range, 100 per page, and filter by item yourself.
# The search accepts an "items" parameter, but SEC's cache ignores it, so do not trust it.
rows, offset = [], 0
while True:
q = urllib.parse.urlencode({"forms": "8-K", "dateRange": "custom", "startdt": START, "enddt": END, "from": offset})
page = get("https://efts.sec.gov/LATEST/search-index?" + q)
hits = page["hits"]["hits"]
for h in hits:
s = h["_source"]
if "8-K/A" != s["form"] and WANT & set(s["items"]):
name = s["display_names"][0].split(" (")[0]
rows.append((s["file_date"], name, ",".join(s["items"]), s["adsh"]))
offset += len(hits)
if not hits or offset >= page["hits"]["total"]["value"] or offset >= 10000:
break
for r in rows[:5]:
print(*r, sep=" | ")
print(len(rows), "filings with item 5.02,", offset, "8-K filings read")
# One company: the submissions API lists items per filing.
sub = get("https://data.sec.gov/submissions/CIK0000320193.json")
rec = sub["filings"]["recent"]
for i, form in enumerate(rec["form"]):
if form == "8-K" and "2.02" in rec["items"][i].split(","):
print(sub["name"], rec["filingDate"][i], rec["items"][i], rec["acceptanceDateTime"][i])
breakOutput of this code on 11.10.2026 against the live endpoints:
2026-10-09 | METROSPACES, INC. | 1.01,5.01,5.02,8.01,9.01 | 0001903596-26-000372
2026-10-09 | Victoria's Secret & Co. | 5.02,9.01 | 0001856437-26-000023
2026-10-09 | Vistagen Therapeutics, Inc. | 5.02,9.01 | 0001628280-26-065559
2026-10-09 | QUANTUM CORP /DE/ | 5.02,8.01 | 0001628280-26-065547
2026-10-09 | Bark, Inc. | 5.02 | 0001628280-26-065536
176 filings with item 5.02, 907 8-K filings read
Apple Inc. 2026-07-30 2.02,9.01 2026-07-31T00:30:28.000ZStep 4: link to the filing
Build the links from the CIK and accession number. Index page: https://www.sec.gov/Archives/edgar/data/<CIK without leading zeros>/<accession without dashes>/<accession with dashes>-index.htm. Main document: the same folder plus the primaryDocument name (in a search hit it is the part of _id after the colon).
Rules
- Public endpoints only. No login, no cookies, no attempts around blocks.
- At most 4 requests per second. Stop on a 403. On a 429 wait the time in the Retry-After header, or stop.
- Send a User-Agent that names your tool and gives your own contact. SEC answers 403 to an empty User-Agent and to default library agents such as curl. Never use another person's email.
- Do not send the
itemsparameter and trust it. The SEC cache ignores it, so a request for one item can return the answer cached for another. Check the item codes of every hit yourself. - Do not copy names of people from filing text into your answer unless the user needs them and has the right to use them.
- Say what you could not check: a filing can appear in the index a few hours after it is accepted, and a company with several co-registrants appears under its first CIK in the search.
Limits
The search index starts in 2001. A rare item over a long range needs many pages (a full year is about 350 requests). For scheduled runs, item labels, CSV export or many companies at once, a script or the hosted version is quicker than asking one question at a time.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

