The SEC's current report form for material events, which companies must file within four business days of any significant corporate development.
In Plain English
Between quarterly reports, companies are not allowed to sit on material information. The 8-K is the mechanism for immediate disclosure: whenever something significant happens — a merger agreement, the departure of the CEO, an earnings preannouncement, a bankruptcy filing, a major customer loss — the company must file an 8-K within four business days.
The range of events that trigger an 8-K is vast. Some are positive: a major acquisition, a new credit facility, exceeding earnings guidance. Some are negative: a securities class action lawsuit, a going concern warning from auditors, a regulatory investigation. Some are neutral but structurally significant: a change in fiscal year, a new director appointment, an update to the company's bylaws.
For NLP systems, 8-Ks are particularly interesting because they're unscheduled and often written under time pressure. The language in an 8-K filed at 7pm on a Friday about an executive departure is less polished than a scheduled earnings call. These disclosures can reveal a lot about how management is characterizing unexpected events.
The items most frequently useful for investment analysis include Item 1.01 (material definitive agreements), Item 2.02 (results of operations, essentially the earnings release), Item 5.02 (director/officer changes), and Item 8.01 (other events). Item 2.02 is particularly important: the earnings release that companies include with their 8-K is often the same document discussed on the subsequent earnings call, filed simultaneously.
Technical Definition
8-K items requiring disclosure (selected most-traded):
- Item 1.01: Material Definitive Agreement (M&A, large contracts)
- Item 1.02: Termination of Material Definitive Agreement
- Item 1.03: Bankruptcy or Receivership
- Item 2.01: Completion of Acquisition or Disposition
- Item 2.02: Results of Operations and Financial Condition (earnings release)
- Item 2.04: Triggering Events for Acceleration, Termination, or Increase of Direct Financial Obligation
- Item 2.06: Material Impairments
- Item 3.01: Notice of Delisting or Failure to Satisfy Continued Listing Rules
- Item 4.02: Non-Reliance on Previously Issued Financial Statements (restatement warning)
- Item 5.02: Departure of Directors or Certain Officers; Election of Directors
- Item 7.01: Regulation FD Disclosure
- Item 9.01: Financial Statements and Exhibits
Item 4.02 is a particularly strong negative signal: companies disclosing that prior financial statements should not be relied upon (often preceding a restatement) historically precede severe stock declines.
How VectorFin Uses This
VectorFin ingests 8-K filings — particularly Items 2.02, 5.02, and 1.01 — as inputs to the anomaly signal. Unusual linguistic patterns in 8-K text, compared to historical 8-K language for the same company, trigger anomaly score elevation.
The anomaly signal table in signals/anomaly aggregates multiple signals including:
- Earnings call embedding anomaly (language far from historical norm)
- 8-K filing frequency spike (more 8-Ks than usual in a period)
- 8-K semantic anomaly (language drift in unscheduled filings)
GET https://api.vectorfinancials.com/v1/signals/anomaly/{ticker}?date=2024-10-01
GET https://api.vectorfinancials.com/v1/embeddings/{ticker}?source=filing&filing_type=8-K&period=2024-Q4Code Example
import requests
from datetime import date, timedelta
API_BASE = "https://api.vectorfinancials.com"
API_KEY = "vf_your_api_key_here"
# Monitor anomaly signals — elevated score may indicate unusual 8-K activity
ticker = "AAPL"
# Check anomaly signal history
anomaly_resp = requests.get(
f"{API_BASE}/v1/signals/anomaly/{ticker}",
params={"start": "2024-01-01", "end": "2024-12-31"},
headers={"X-API-Key": API_KEY},
)
anomaly_data = anomaly_resp.json()["data"]
# Find dates with elevated anomaly scores
high_anomaly_dates = [
d for d in anomaly_data
if d["anomaly_score"] > 0.70
]
print(f"High anomaly dates for {ticker} in 2024:")
for d in high_anomaly_dates:
print(f" {d['date']}: score={d['anomaly_score']:.3f}, flags={d['flags']}")
if high_anomaly_dates:
# Fetch 8-K filings around the anomaly dates for investigation
for anomaly in high_anomaly_dates[:2]:
anomaly_date = anomaly["date"]
print(f"\nSearching 8-K content around {anomaly_date}...")
embedding_resp = requests.get(
f"{API_BASE}/v1/embeddings/{ticker}",
params={
"source": "filing",
"filing_type": "8-K",
"filed_after": (date.fromisoformat(anomaly_date) - timedelta(days=7)).isoformat(),
"filed_before": (date.fromisoformat(anomaly_date) + timedelta(days=7)).isoformat(),
},
headers={"X-API-Key": API_KEY},
)
if embedding_resp.ok:
chunks = embedding_resp.json()["chunks"]
print(f" Found {len(chunks)} 8-K chunks near anomaly date")
if chunks:
print(f" First chunk: {chunks[0]['text'][:200]}")External References
Put 8-K Filing to work in your pipeline
Access AI-ready financial data — embeddings, signals, Iceberg tables.