Fastest SEC Filings Websocket

Background

Filings propagate across the SEC website at different times. For example:

  1. T+0s: RSS feed reports a new filing, and link to filing content. This is how almost all people get filings. e.g.
  2. T-5s: Filing content becomes available. e.g.
  3. 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)
AccessionURLFastest SEC Filings Websocket (ET)SEC Filings Websocket (ET)Delta
0001213900-26-101887link20:00:26.45620:01:40~+73.5s (feed later)
0001193125-26-397011link20:20:21.12220:20:29~+7.9s (feed later)
0001193125-26-397005link20:16:50.51020:16:58~+7.5s (feed later)

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

Bugs/Future