Home / Guides / 8-K events
8-K events

Measure 8-K material event activity by item

Count 8-K filings per item and per month with the SecFeed API to see when companies report earnings, votes, agreements and leadership changes.

Every Form 8-K declares one or more items: 1.01 for a material agreement, 2.02 for earnings, 5.02 for an officer or director change, and so on. Counting filings by item over time shows the rhythm of corporate disclosure: earnings cluster after quarter end, shareholder votes cluster in proxy season, and some items (like 8.01 "other events") stay steady all year.

This tutorial builds that activity table from the SecFeed 8-K events API with one request per item and month.

How the 8-K events API counts filings

GET /v1/form-8k returns 8-K filings classified by item. Each response carries total, the number of filings matching the filter, so asking for size=1 is enough when you only need counts. Filters:

  • item: an item number such as 2.02
  • startDate, endDate: filing date range, inclusive
  • cik: optional, to restrict to one company

A filing with several items (for example 2.02 plus 9.01) is counted once under each item it reports.

Build the table

import os
import requests

BASE = "https://secfeedapi.com"
HEADERS = {"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"}

ITEMS = {"1.01": "Material agreement", "2.02": "Earnings results", "5.02": "Officer or director change",
         "5.07": "Shareholder vote", "7.01": "Reg FD disclosure", "8.01": "Other events"}
MONTHS = [("2026-06-01", "2026-06-30"), ("2026-07-01", "2026-07-31"), ("2026-08-01", "2026-08-31"), ("2026-09-01", "2026-09-30")]


def count(item, start, end):
    r = requests.get(f"{BASE}/v1/form-8k", params={"item": item, "startDate": start, "endDate": end, "size": 1},
                     headers=HEADERS, timeout=120)
    r.raise_for_status()
    return r.json()["total"]


print(f"{'Item':<6}{'Description':<28}" + "".join(f"{s[:7]:>10}" for s, _ in MONTHS))
for item, label in ITEMS.items():
    row = [count(item, s, e) for s, e in MONTHS]
    print(f"{item:<6}{label:<28}" + "".join(f"{n:>10,}" for n in row))

Output:

Item  Description                    2026-06   2026-07   2026-08   2026-09
1.01  Material agreement                 990       831       820       805
2.02  Earnings results                   243     1,410     2,365       240
5.02  Officer or director change       1,085       900       841       821
5.07  Shareholder vote                 1,416       231       217       215
7.01  Reg FD disclosure                1,230     1,350     1,539     1,194
8.01  Other events                     1,503     1,377     1,361     1,295

Reading the numbers

A few patterns stand out:

  • Item 2.02 earnings swings from about 240 filings in June and September to 1,410 in July and 2,365 in August. That is the second quarter reporting season: most calendar year companies furnish their earnings release under Item 2.02 within a few weeks of quarter end.
  • Item 5.07 shareholder votes peaks in June (1,416) and falls to about 215 a month afterwards. Companies must report vote results within four business days of the meeting, and most annual meetings happen in the spring.
  • Item 1.01, 5.02, 7.01 and 8.01 stay in a band of roughly 800 to 1,500 a month. Agreements, leadership changes and Regulation FD disclosures happen all year.
SecFeed classifies 8-K items from mid 2024 onward today, and the history is being backfilled toward 2004. Counts for recent months are complete; check the dataset page for the current coverage before comparing older years.

Narrow it down

The same request works for a single company or sector. Add cik to count one filer's events, or swap the month list for weeks to watch an earnings season build up day by day. To read what was disclosed, call the item feeds with text, for example /v1/form-8k/earnings-results or /v1/form-8k/executive-changes, which return the item text extracted from each filing.

Next steps

More 8-k events guides

Run this guide with your own key

500 free API calls a month. Every example on this page works on the free plan.

Get free API key →