Massive processes SEC EDGAR filings on no fixed schedule. A financial report appears on the financials endpoint once the filing it comes from has been accepted by EDGAR and processed by us, and there is a lag between those two things: filings accepted in the last day or two may not be in the API yet. So the absence of a very recent filing is not evidence that the company has not filed. For the newest period, read filing_date on the record rather than inferring timing from when your poll first saw it. For an older period, filing_date names the most recent filing that repeated it, and the date it was first filed is on the SEC EDGAR Index endpoint, /stocks/filings/vX/index.
Applies to
- Plans: Stocks Advanced, or any plan carrying the Financials and Ratios Expansion. Data is end-of-day on every tier that has it.
- Endpoints: /stocks/financials/v1/income-statements, /stocks/financials/v1/balance-sheets, /stocks/financials/v1/cash-flow-statements.
- Asset classes: US stocks.
How to tell when a report became available
curl -X GET "https://api.massive.com/stocks/financials/v1/income-statements?tickers=AAPL&timeframe=quarterly&sort=period_end.desc&limit=1&apiKey=YOUR_API_KEY"
Response
{
"status": "OK",
"results": [
{ "tickers": ["AAPL"], "period_end": "2026-06-27", "filing_date": "2026-07-31",
"fiscal_year": 2026, "fiscal_quarter": 3, "timeframe": "quarterly" }
]
}
The gap between period_end and filing_date is the point: the quarter ended on 27 June and the filing arrived on 31 July. Anything that treats the numbers as known on period_end is using information a month before it existed.
How to keep a dataset current
- Poll for the tickers and periods you care about rather than expecting a push. There is no webhook.
- Select on filing_date.gte to see what is new since your last poll. You cannot sort on it: sort accepts only cik, period_end, fiscal_year, fiscal_quarter and timeframe, and anything else returns a 400 naming the list.
- Expect restatements. A company can amend a filing, and the record for a period can change after you first stored it, so key your store on the period and overwrite.
- Do not poll aggressively for a single company. Filings arrive in bursts around the reporting calendar and not at all between them.
Why the timing is uneven
The timing is uneven because filings do not arrive evenly. Companies file when their own calendars require it, heavily clustered a few weeks after each quarter end, and the SEC accepts them through the day and after the close. A burst of filings therefore takes longer to work through than a quiet day does, which is the practical reason a report you expect may not be there the morning after it was filed.
If you need to know the moment a filing exists rather than the moment we have parsed it, EDGAR itself is the authority and its daily index is public.
If you see an error
A period you expect but cannot find has either not been filed yet or not been processed yet. Check the company's reporting calendar, and check EDGAR directly if the filing is only a day or two old.
Every record carries a filing_date, including the trailing-twelve-month ones, and on every record it names the most recent filing that included the period, not necessarily the filing that first reported it. The withdrawn /vX/reference/financials endpoint left filing_date null on derived records. The current endpoints do not.
Figures that changed since you stored them are a restatement. The current record is the correct one.

