VectorFin/Glossary/8-K Filing
NLP for Finance

What is 8-K Filing?

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-Q4

Code 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]}")

Put 8-K Filing to work in your pipeline

Access AI-ready financial data — embeddings, signals, Iceberg tables.