Use case

Event-driven research with Form 8-K filings and newsrooms

A company tells you what it has done in two places, its newsroom and its Form 8-K. Here is how to join them into one dated calendar and where the labels stop.

Updated 5 October 20266 min read

An event-driven process needs a dated record of what companies say they have done: a deal agreed, an executive leaving, a restructuring plan, an incident. Companies say it in two places, their own newsrooms and, for listed companies that file with the SEC, Form 8-K. This guide shows how to combine the two into one event calendar from Company News (company_news), how each channel assigns an event type, how timing differs between a press release and a filing, and what the calendar cannot tell you.

What Company News holds

Company News (company_news) delivers company announcements and regulatory disclosures, classified into 13 event types. It has one row for each announcement a company made about itself: a newsroom or press item, or a Form 8-K current report. Each item is stored once. The columns below carry the calendar, and the data dictionary lists the rest.

ColumnWhat it holds
atThe date the company published the item; where an item gives none, the date it entered the record
sourcerss, atom, page (a newsroom item) or sec_8k
titleAs published; for an 8-K, the form and its item labels
event_typesZero or more of the 13 event types
itemsThe Form 8-K item numbers the filing was made under; empty otherwise
accessionThe SEC accession number, for 8-Ks
urlThe original announcement or filing document
excerptUp to 1,200 characters of the announcement's own text; for an 8-K, the text under its items
label_versionnews-v1 (read by a model) or sec-items-v1 (mapped from item numbers)
rolesFor a leadership change, the role concerned, never the person

The announcements and scale dataset is refreshed daily to every three days. Everything in it is something the company said about itself, which makes each row a primary source.

Thirteen event types, assigned two ways

The types are product_launch, partnership, acquisition_made, acquired_or_merged, funding_round, leadership_change, layoffs_restructuring, expansion, incident, financial_results, award_or_recognition, regulatory_or_legal and other. A row receives its type in one of two ways, and the way matters when you read it.

Newsroom and feed items are read once by a model under the frozen version news-v1, which chooses one type and keeps it only at a probability of 0.45 or above. An item the model does not read as being about the company itself carries no type. A Form 8-K needs no model: the item numbers say what was filed, and each maps to a type under sec-items-v1. The methodology gives these examples.

8-K itemWhat the item reportsEvent type
1.01Entry into a material definitive agreementpartnership
1.05Material cybersecurity incidentincident
2.01Completion of an acquisition or disposition of assetsacquisition_made
2.05Costs of exit or disposal activitieslayoffs_restructuring
3.02Unregistered sale of equity securitiesfunding_round
5.01Change in control of the registrantacquired_or_merged
5.02Departure or appointment of directors and certain officersleadership_change

A filing made under several items can carry several types. Because the mapping follows the item number, an 8-K is only as specific as its item. Item 1.01 covers any material agreement, so a supply contract and a credit facility both arrive as partnership, and Item 2.01 covers disposals as well as acquisitions and arrives as acquisition_made. The excerpt and the url say which it was. To see the whole mapping as delivered, group the 8-K rows of your sample by items and event_types.

Newsroom against filing: who speaks first

Many events appear in both places: a press release on the newsroom and an 8-K filed under the item that fits. A company generally has four business days from the event to file, so the filing can follow the press release by days, and some companies file first and publish later. Both rows are in Company News, each with its own at. Three properties of the data matter when you line them up.

  • One event can arrive as two rows with two types. A newsroom item announcing a deal can be typed acquisition_made by the model while the 8-K that follows under Item 1.01 is typed partnership. Match on company and date window, not on type, and keep the union of types and both addresses.
  • Dates, not times. at is the day the company published, so a newsroom item and a filing on the same day cannot be ordered from the table. If the order within a day matters, take the time from the filing itself, using accession.
  • Publication date and receipt. at is the publication date, so an item can be older than the day it reaches you. Log the time you receive each row and use that, not at, as the earliest moment you could have known it.

Measure the lag on the companies you track before you assume anything about it. The query below pairs each 8-K under Item 5.02 with newsroom items typed leadership_change within a week either side and returns the gap in days. A positive gap means the newsroom spoke first. The queries in this guide use Postgres syntax, and list columns arrive as JSON in a single cell.

select
  f.company_id,
  f.at::date               as filing_day,
  n.at::date               as newsroom_day,
  f.at::date - n.at::date  as days_after_newsroom,
  n.url                    as newsroom_url,
  f.url                    as filing_url
from company_news f
join company_news n
  on  n.company_id = f.company_id
  and n.source <> 'sec_8k'
  and n.at::date between f.at::date - 7 and f.at::date + 7
where f.source = 'sec_8k'
  and f.items @> '["5.02"]'
  and n.event_types @> '["leadership_change"]'
order by f.at;

Building the calendar

  1. Map the companies. Rows carry company_id and, for a listed company or its parent, ticker, mic, isin, lei and figi. Join on isin or figi to your security master.
  2. Keep the rows that have a type. Filter on event_types being non-empty. For 8-Ks filter on items as well, since the item number is the filer's own classification.
  3. Collapse duplicates. Cluster the rows of one company whose at dates fall within a few days of each other. Keep the earliest at, every url and the union of types, and review a sample of clusters by hand to tune the gap.
  4. Add the role. For a leadership_change, read roles for the role concerned: ceo, cfo, coo, cro_cso for revenue, sales or commercial leaders, cmo, cto_cio_cpo, chro, general_counsel, board, other_executive or none. Under roles-v1 the same reading also gives the direction, appointed, departed or succession, and a flag when more than one role changes.
  5. Set the context. Place each event beside the company's hiring and technology changes in the days around it. The guide to detecting restructuring early from postings and announcements shows one way to do it. For the market-wide rate of an event type, the news_event family in the market series states events per 100 companies on same-store cohorts, so a company's events can be read against a base rate.
  6. Test on dated data. Use the time you received each row as the date from which an event was known, as set out in building a point-in-time dataset for back-tests.
select n.at, u.ticker, n.source, n.event_types, n.items, n.title, n.url
from company_news n
join my_companies u on u.isin = n.isin
where n.at >= :from_day
  and jsonb_array_length(n.event_types) > 0
order by n.at, u.ticker;

The calendar below is illustrative, for the invented company Acme Robotics. It announces a deal on its newsroom, files the 8-K two days later and files again when the deal closes. The first two rows are one event with two types, and the third row is a second event.

Daysourceitemsevent_types
0pageemptyacquisition_made
2sec_8k1.01, 9.01partnership
61sec_8k2.01, 9.01acquisition_made

How to read the calendar

Labels. Newsroom types come from a named, frozen model version, and 8-K types follow their item numbers. Read the excerpt before acting on a type.

Coverage. Newsroom items and Form 8-K filings arrive in one dataset, so a company that files and a company that only announces sit in the same calendar.

Roles. A leadership change is delivered as the role concerned and the direction. The name sits in the filing or newsroom item behind url.

Results. A financial_results row records that a company published results and links to them, so the calendar tells you the day and the document, and your financial data source supplies the figures.

Time and text. at is a date, rows arrive daily to every three days, and excerpt carries up to 1,200 characters, so the calendar suits a daily review. The filing itself is at url.

The record. Every row is dated, written once and never revised, so a calendar built today for a past period gives the same result whenever you build it. The credit view of the same events is in company signals in credit research.

How Fokals delivers it

Announcements and scale is one of five products. It holds Company News, Employee Headcount and Web Traffic, which deliver the announcements and disclosures classified into 13 event types, stated headcount over time and the monthly traffic tier of each website, and it reaches you through the REST API or as bulk files in JSON, JSON Lines or CSV, with a manifest that names sources, period, label versions and licence.

Frequently asked questions

What is a Form 8-K and why does it matter for event-driven research?

A Form 8-K is the current report that a company files with the US Securities and Exchange Commission to disclose specified events between its periodic reports, under numbered items. For research it is a dated statement by the company itself of what it says has happened. Company News records its item numbers, keeps the text under them as the excerpt and maps each item to one of 13 event types.

How quickly does an announcement reach the data after it is published?

Company News is refreshed daily to every three days, depending on the company, and each row carries the date the company published the item. That suits a calendar and a daily review, with the time stamp on the filing itself available at the link for any case where the order within a day matters.

What does Fokals deliver for each Form 8-K?

Each filing arrives as a dated row with its item numbers, up to 1,200 characters of the text under the filed items, the event types mapped from the items and a link to the original filing document. The filing's accession number is recorded too, so you can match a row to the same filing in your own archive of filings.

What does Fokals record about a leadership change?

The role concerned, such as chief financial officer or general counsel, and the direction: appointed, departed or succession. A flag marks a filing where more than one role changes. Each row links to the company's own announcement or filing, which is the source to read for the full text of the change.

How reliable are the event types on newsroom items?

Newsroom types are assigned by a model under a named, frozen version, which keeps a choice only at a probability of 0.45 or above, so every type shown is one the model stands behind. Form 8-K types follow the item numbers the filer chose, which gives them the precision of the item. Read the excerpt before acting on a type.

The queries and code on this page are examples to adapt. Test them in your own environment before you rely on them.