Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor · · Updated 2026-07-26

SEC EDGAR Index Gap: the Missing Month-Ends

Three 2026 month-ends are near-empty in the SEC EDGAR filing index: the receipts, the ingest evidence that bounds the fault, the 2025 precedent, what breaks.

A month's last trading day is normally one of the busiest days in the SEC's filing index, the record of every document companies lodge with the regulator. In 2026 it is nearly empty three times over. March 31, April 30 and June 30 each carry a double-digit handful of filings where their neighbouring days carry thousands, and the pattern is calendar-shaped: every 2026 month whose last CALENDAR day fell on a weekday is a crater, and every month whose last calendar day fell on a weekend is intact. Below: the receipts, the arrival timestamps that bound where the fault sits, the one earlier day that rhymes with it, and what a filing count touching those dates is worth.

The gap first surfaced as a quarter-end problem while we were assembling the Q2 recap and H1 recap, hence this page's URL. Further probing reframed it as a month-end problem; the page updates in place on the same address.

Which days are missing

QueryFiling counts on the last weekday of each 2026 month, with prior-year weekday month-ends as controls
The exact SQL behind every number
SELECT d, filings, month_ends_on FROM (
    SELECT '2026-01-30' AS d, (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-01-30')) AS filings, 'Saturday' AS month_ends_on, 1 AS ord
    UNION ALL SELECT '2026-02-27', (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-02-27')), 'Saturday', 2
    UNION ALL SELECT '2026-03-31', (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-03-31')), 'weekday (the gap day)', 3
    UNION ALL SELECT '2026-04-30', (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-04-30')), 'weekday (the gap day)', 4
    UNION ALL SELECT '2026-05-29', (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-05-29')), 'Sunday', 5
    UNION ALL SELECT '2026-06-30', (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-30')), 'weekday (the gap day)', 6
    UNION ALL SELECT '2025-09-30', (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2025-09-30')), 'weekday, full in the prior year', 7
    UNION ALL SELECT '2025-12-31', (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2025-12-31')), 'weekday, full in the prior year', 8
) ORDER BY ord
Run this yourself

The pattern reads straight down the panel. January's last weekday carries 4332 filings and February's carries 7870, both months whose final calendar day landed on a Saturday, so the last weekday sat a day or two inside the month. Then 55 on March 31, 34 on April 30, back up to 5527 on May 29 (May ended on a Sunday), and 31 on June 30. The prior-year controls sit at 3460 and 2289 filings, the same weekday-month-end shape, fully populated. Near-empty exactly when, and only when, a 2026 month's final calendar day is itself a weekday.

How big is the hole, in plain terms

Raw counts understate how violent this is. Here is every weekday month-end since 2020 that came in under a thousand filings, each measured against the average of the index days within five days of it.

QueryEvery weekday month-end since 2020 with fewer than 1,000 filings: count, companies touched, and the neighbouring days' average
The exact SQL behind every number
WITH daily AS (
    SELECT
        filing_date,
        uniqExact(accession_number) AS filings,
        uniqExact(cik) AS companies,
        max(_ingest_time) AS last_arrived
    FROM global_markets.stocks_sec_edgar_index
    WHERE filing_date >= toDate('2019-12-20') AND filing_date <= toDate('2026-07-06')
    GROUP BY filing_date
),
month_ends AS (
    SELECT arrayJoin(arrayMap(i -> toLastDayOfMonth(addMonths(toDate('2020-01-01'), i)), range(78))) AS me
),
sparse AS (
    SELECT
        e.me AS me,
        toUInt32(ifNull(d.filings, 0)) AS filings,
        toUInt32(ifNull(d.companies, 0)) AS companies,
        d.last_arrived AS last_arrived
    FROM month_ends AS e
    LEFT JOIN daily AS d ON d.filing_date = e.me
    WHERE toDayOfWeek(e.me) <= 5 AND toUInt32(ifNull(d.filings, 0)) < 1000
)
SELECT
    toString(s.me) AS month_end,
    any(s.filings) AS filings,
    any(s.companies) AS companies,
    toUInt32(round(avgIf(n.filings, abs(dateDiff('day', n.filing_date, s.me)) <= 5 AND n.filing_date != s.me))) AS neighbour_day_avg,
    round(100 * any(s.filings) / avgIf(n.filings, abs(dateDiff('day', n.filing_date, s.me)) <= 5 AND n.filing_date != s.me), 1) AS pct_of_normal,
    toString(toDate(any(s.last_arrived))) AS last_row_arrived
FROM sparse AS s
CROSS JOIN daily AS n
GROUP BY s.me
ORDER BY s.me
Run this yourself

6 days in six and a half years. The 2026 trio sits at the bottom: June 30 carries 31 filings against a neighbouring-day average of 4444, 0.7% of a normal day, a shortfall north of 99%. April 30 lands at 0.6% and March 31 at 1.2%. Put in companies rather than documents: the entire June 30, 2026 index names 27 distinct filers.

The other three rows are the reason this is not a clean "2026 only" story. Two are ordinary federal closures: May 31, 2021 was Memorial Day, and December 31, 2021 was the federal observance of New Year's Day 2022 (January 1 fell on a Saturday). EDGAR keeps the federal holiday calendar, so near-zero counts there, 0 and 1 filings, are what a closed filing window looks like, not a defect.

The third is the interesting one. April 30, 2025 carries 928 filings, 19.1% of its neighbours, partial, not empty. It is the only weekday month-end since 2020 to sit that far below normal with no holiday to explain it, and it predates the 2026 craters by a year: a milder version of the same boundary behaviour, at roughly a fifth of a normal day rather than a hundredth.

Every month-end since 2020

QueryEvery weekday month-end since 2020: filings indexed on the month's last calendar day
The exact SQL behind every number
WITH month_ends AS (
    SELECT arrayJoin(arrayMap(i -> toLastDayOfMonth(addMonths(toDate('2020-01-01'), i)), range(78))) AS me
),
daily AS (
    SELECT filing_date, uniqExact(accession_number) AS filings
    FROM global_markets.stocks_sec_edgar_index
    WHERE filing_date >= toDate('2020-01-01') AND filing_date <= toDate('2026-06-30')
    GROUP BY filing_date
)
SELECT toString(e.me) AS month_end, toUInt32(ifNull(d.filings, 0)) AS filings
FROM month_ends AS e
LEFT JOIN daily AS d ON d.filing_date = e.me
WHERE toDayOfWeek(e.me) <= 5
ORDER BY e.me
Run this yourself

The long series is the control for the whole argument. Across the 55 weekday month-ends between January 2020 and June 2026, the line runs flat in the thousands and then falls off a cliff at the right-hand edge. Nothing about a month's last weekday makes filings scarce, deadlines cluster there.

What is actually on the missing day

QueryForm types on the gap day (June 30, 2026) against the trading day before it
The exact SQL behind every number
SELECT
    form_type,
    uniqExactIf(accession_number, filing_date = toDate('2026-06-29')) AS normal_day_jun29,
    uniqExactIf(accession_number, filing_date = toDate('2026-06-30')) AS gap_day_jun30
FROM global_markets.stocks_sec_edgar_index
WHERE filing_date IN (toDate('2026-06-29'), toDate('2026-06-30'))
GROUP BY form_type
ORDER BY gap_day_jun30 DESC, normal_day_jun29 DESC, form_type
LIMIT 14
Run this yourself

This panel names the defect. The forms with any rows at all on June 30 sit at the top: 15 EFFECT notices, the SEC's own confirmations that a registration statement has become effective, plus municipal-advisor registrations, offering qualifications and trading-venue notices. Those are documents the SEC's systems emit, not documents companies submit. Every form type that makes up a normal day's bulk shows 0 rows: 926 424B2 prospectus supplements on June 29 and none the next day, 595 insider-transaction Form 4 filings and none the next day, 223 8-K corporate-event reports and none the next day. A quarter-end Tuesday with zero 8-Ks and zero insider forms is not a market fact. It is a missing file.

When the rows arrived

QueryWhen each day's rows actually landed in the warehouse, June 26 to the front edge
The exact SQL behind every number
SELECT
    toString(filing_date) AS d,
    uniqExact(accession_number) AS filings,
    formatDateTime(min(_ingest_time), '%Y-%m-%d %H:%i') AS first_arrived
FROM global_markets.stocks_sec_edgar_index
WHERE filing_date >= toDate('2026-06-26') AND filing_date <= toDate('2026-07-10')
GROUP BY filing_date
ORDER BY filing_date
Run this yourself

Arrival timestamps are the closest thing to a fingerprint here. Every June day through the 29th landed in the warehouse in one job, 2026-07-01 09:38 UTC, a single batch with the whole month behind it. June 30 arrived alone the next morning, at 2026-07-02 09:12, carrying its 31 administrative rows while its neighbour a day earlier carried 4439. The March and April boundary days show the identical shape, one month earlier.

QueryStatus receipt: the March and April boundary days, their arrival times, and their counts as of this run
The exact SQL behind every number
SELECT
    (SELECT toString(toDate(min(_ingest_time))) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-04-01')) AS apr1_first_arrived,
    (SELECT toString(toDate(min(_ingest_time))) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-04-30')) AS apr30_first_arrived,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-03-31')) AS mar31_filings_now,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-04-30')) AS apr30_filings_now,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-30')) AS jun30_filings_now,
    (SELECT uniqExact(form_type) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-30')) AS jun30_form_types
Run this yourself

April 1's rows first landed on 2026-05-01, April's month-batch, running at the turn of May. April 30's rows landed on 2026-05-02, one day LATER than the batch that should have contained them. That single day of separation is the whole diagnosis in one number: the job that loads a month stops one day short of the month's end, and the boundary day is then picked up by a different, evidently incomplete path. When a month's last calendar day is a weekend the miss costs nothing (there is nothing to file), and when it is a trading day one of the month's busiest sessions gets swapped for a handful of SEC-issued notices spread across 6 form types.

Whether that off-by-one bound sits in the vendor's pipeline or in our ingest of it is not determinable from inside this warehouse, settling it needs the SEC's raw daily index files for those three dates, a comparison this page cannot run. What the receipts do establish: three specific dates are unusable for filing counts.

Status as of this revision

Not fixed. Every count on this page is recomputed each time the page is generated, and as of this run March 31 still carries 55 filings, April 30 34, and June 30 31, the counts recorded when the gap was first written up. The index is otherwise healthy: 2026-07-10 carries 2226 filings, arriving on schedule. The sanity bounds here hold the three days at their near-empty values, so a backfill trips them and forces a regeneration with corrected numbers.

Is anything else missing?

A boundary bug in one loader says nothing about the others. Is June 30 thin anywhere else in the warehouse?

QueryIs June 30, 2026 missing anywhere else? The same day across five date-keyed datasets
The exact SQL behind every number
SELECT dataset, jun29, jun30 FROM (
    SELECT 'SEC filing index (filings)' AS dataset,
        (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-29')) AS jun29,
        (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-30')) AS jun30, 1 AS ord
    UNION ALL SELECT 'Minute bars (tickers)',
        (SELECT uniqExact(ticker) FROM global_markets.delayed_stocks_minute_aggs WHERE window_start >= toDateTime('2026-06-29 04:00:00') AND window_start < toDateTime('2026-06-30 04:00:00')),
        (SELECT uniqExact(ticker) FROM global_markets.delayed_stocks_minute_aggs WHERE window_start >= toDateTime('2026-06-30 04:00:00') AND window_start < toDateTime('2026-07-01 04:00:00')), 2
    UNION ALL SELECT 'Dividends (ex-div records)',
        (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = toDate('2026-06-29')),
        (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = toDate('2026-06-30')), 3
    UNION ALL SELECT 'News articles',
        (SELECT count() FROM global_markets.stocks_news WHERE toDate(published_utc) = toDate('2026-06-29')),
        (SELECT count() FROM global_markets.stocks_news WHERE toDate(published_utc) = toDate('2026-06-30')), 4
    UNION ALL SELECT 'Treasury curve rows',
        (SELECT count() FROM global_markets.treasury_yields WHERE date = toDate('2026-06-29')),
        (SELECT count() FROM global_markets.treasury_yields WHERE date = toDate('2026-06-30')), 5
) ORDER BY ord
Run this yourself

It is not. The minute-bar tape covers 11982 tickers on June 30 against 11903 the day before; 704 ex-dividend records, 215 news articles and a full Treasury curve land on the day too. Only the filing index, 31 rows against 4439, has the hole. The week recap carries the session receipts: June 30, 2026 was a Tuesday and a full trading day.

What this means if you count filings

Any count whose window includes March 31, April 30 or June 30, 2026 is understated by more than a rounding error: three heavy filing days replaced by near-zero. That clips the March, April and June monthly totals, the Q1 and Q2 quarterly totals, and the half-year total. Our own June recap publishes its filing counts with the disclosure inline, and the same caveat applies to any filings-count question you ask of a terminal, ours included, that touches those dates. Ask for filings per month in 2026 and three of the six answers are short by roughly a full day of documents.

The form types in one line each

  • 8-K, a corporate event report: a company telling the market something happened.
  • Form 4, an insider (officer, director, large holder) reporting a trade in their own stock.
  • 10-Q, the quarterly financial report.
  • 424B2, a prospectus supplement: the pricing document for a securities offering.
  • NPORT-P, a fund's monthly portfolio-holdings report.
  • EFFECT / QUALIF / MA-I / ATS-N, administrative notices the SEC's own systems generate: a registration going effective, an offering qualified, a municipal advisor registering, a trading venue filing disclosures. These are what survived the gap days. Which SEC filings appear most often breaks the full distribution down.

FAQ

Is the SEC EDGAR filing gap fixed yet?

Not as of this revision. March 31, April 30 and June 30, 2026 still carry 55, 34 and 31 filings respectively in our copy of the index. This page regenerates when they change, and its sanity bounds are set to fail if a backfill lands, which is the point of publishing the receipts rather than a memo.

Does this mean the SEC lost the filings?

No. The documents exist on EDGAR; what is missing is a day's worth of INDEX rows in the downstream copy of it, the arrival times show the loader running on schedule and delivering an almost-empty day. Whether the off-by-one bound sits with the data vendor or with our load of it needs the SEC's own daily index files for those three dates to settle.

What is the SEC EDGAR filing index?

EDGAR is the SEC's public filing system, and its daily index lists every document filed that day: the company, the form type, the accession number that uniquely identifies the filing, and the link. It is the backbone of anything that counts filings, insider-trade screens, 8-K event feeds, prospectus trackers.

Which form types were missing on June 30, 2026?

All the ones companies file. The day carries 6 form types, all of them SEC-generated administrative notices. The previous session's 926 424B2 filings, 595 Form 4 insider reports and 223 8-K event reports all fall to 0 on the gap day.

Has this happened before 2026?

Once, in a milder form. April 30, 2025 sits at 19.1% of a normal day, partial rather than empty, and unexplained by any holiday. The only other sub-1,000 weekday month-ends since 2020 are May 31, 2021 (Memorial Day) and December 31, 2021 (the federal observance of New Year's Day), both of which are genuine closures rather than data faults.

Methodology

  • All counts deduplicate by accession number: one filing can index under several entities.
  • "Neighbouring-day average" is the mean count of the index days within five calendar days of the day in question, excluding it.
  • Arrival times are this warehouse's own _ingest_time values, not the SEC's, they measure the pipeline a reader of this page actually experiences.
  • Weekday month-ends are the last CALENDAR day of each month falling Monday to Friday; two of them are federal holidays and are flagged as such above.
  • This note updates in place; its original quarter-end framing was superseded by the month-end evidence, on the same URL. Every number is a stored query result, re-run through the gated read-only path on each regeneration, run the same queries yourself on the Strasmore terminal.