Fastest SEC Filings Websocket
Background
Filings propagate across the SEC website at different times. For example:
- T+0s: RSS feed reports a new filing, and link to filing content. This is how almost all people get filings. e.g.
- T-5s: Filing content becomes available. e.g.
- T-30s: Filing metadata page becomes available. e.g.
Note that times are for intuition, and are not precise.
Predicting and accessing the metadata page is somewhat difficult. I take it as a given that most companies recieve information on new SEC filings perhaps as fast as my existing SEC Filings websocket, webhooks, and email notifications.
Note: When I first published this method, several mid sized trading firms reached out to ask how to setup this up efficiently. They were aware that this was possible, but were spending a lot of money on it.
I have now figured out a way to do this for an estimated 50% of all SEC filings. It should cost me ~$80/month. I am hosting on GCP.
If you would like to use the Fastest SEC Filings Websocket, it costs $0.25 per connection per day. There is no subscription cost, as I would like this to be more accessible to the public.
Metrics
Fastest SEC Filings Websocket is in alpha. Better metrics to be coming soon.
Table (3 rows)
Example Usage
Note that 'index_url' is the fastest method. EFTS and RSS method should be about the same speed as other SEC filings websocket.
Using datamulehub.
import logging
from datetime import datetime
from zoneinfo import ZoneInfo
from datamulehub import sec_filings_notifications
from datamulehub.utils.format_accession import format_accession
logging.basicConfig(level=logging.INFO)
eastern = ZoneInfo("America/New_York")
for filing in sec_filings_notifications.stream_fastest_filings():
ciks = filing.get("ciks", [])
submission_type = filing.get("submission_type")
accession = filing.get("accession")
accno_wo_dash = format_accession(accession, "no-dash")
accno_w_dash = format_accession(accession, "dash")
timestamp = datetime.now(eastern).strftime("%Y-%m-%d %H:%M:%S.%f")[:-3] + " ET"
print("------------")
print(f"[{timestamp}] {submission_type} ciks={ciks}")
print(f"https://www.sec.gov/Archives/edgar/data/{accno_wo_dash}/{accno_w_dash}-index.html")
print(filing)
Misc
- websocket boots all users at 5:00 am UTC (about midnight eastern). datamulehub automatically handles reconnection.
- authentication is handled by cloudflare worker. User sends api key to worker, worker sends back websocket_ip and signed jwt token, user connects to websocket. (all handled by datamulehub)
Bugs/Future
- Currently Fastest SEC Filings will sometimes emit old filings. This should resolve by Wed 9/23/26.
- I am hoping for about ~50% of filings to be detected early with the current approach. I am planning a new approach that may get much more.