Connects Claude to the FilingFirehose SEC EDGAR API for body-text-parsed filings. Exposes operations to fetch recent 8-K filings with buried-event detection (flagging when filer-reported items don't match body language), activist-tagged Schedule 13D/G filings searchable by investor name, and ATM offerings extracted from S-3 prospectus supplements. The free tier returns 72 hours of data; paid keys unlock historical search back to 2026. Reach for this when you need to catch unreported cyber incidents, officer departures, or material agreements that companies bury in generic 8.01 "other events" filings, or when tracking activist positions and shelf offerings programmatically.
Python client for the FilingFirehose SEC EDGAR API — body-text-parsed 8-Ks (with buried-event detection), activist-tagged Schedule 13D/G filings, and ATM offerings extracted from S-3 / 424B5 prospectus supplements.
pip install filing-firehose
The free public tier returns the last 72 hours of filings — no API key required:
from filing_firehose import FilingFirehose
ff = FilingFirehose()
# Recent 8-Ks where the body language flags items the filer didn't report
buried = ff.recent_8k(suspected_buried_only=True, limit=10)
for f in buried:
print(f"{f.company_name}: filer reported {f.filer_reported_items}, "
f"body suggests {f.suspected_buried_events}")
# Recent activist 13D / 13G filings
for f in ff.recent_13d(activist="Saba"):
print(f"{f.company_name} — {f.percent_of_class}% by {f.activist_filers}")
# Recent ATM offerings with shelf size > $50M
for f in ff.recent_atm(min_shelf_million_usd=50):
print(f"{f.company_name}: ${f.shelf_size_million_usd:.1f}M via {f.sales_agents}")
For the full historical archive, get an API key at filingfirehose.com:
ff = FilingFirehose(api_key="ff_live_...")
# Search the entire archive for cyber events
for f in ff.search_8k(items="1.05", since="2026-01-01"):
print(f.company_name, f.filed_at)
import asyncio
from filing_firehose import AsyncFilingFirehose
async def main():
async with AsyncFilingFirehose() as ff:
filings = await ff.recent_8k(items="1.05,5.02")
for f in filings:
print(f.company_name, f.detected_items)
asyncio.run(main())
The wedge: most SEC filings APIs trust the filer-reported item codes on
8-K filings. We body-text-classify every filing and surface a
suspected_buried_events field flagging when the body language doesn't match
the filer's claimed item codes. From a 21-day analysis of 4,251 8-Ks,
7.3% of Item 8.01 filings contain language suggesting a more specific item
should have been used — including buried cyber incidents (1.05), officer
departures (5.02), and material agreements (1.01).
MIT.