S&P 500 open data
5 CSV files you can download with no account, no paywall and no trimming, built from the same data this site paints. Anything derived from SEC filings is public domain and free to reuse; each file states its licence, its coverage, its field dictionary and what it cannot be used to claim.
Every file is served as Content-Type: text/csv and can be fetched from a script. The downloads come from the SAME file that paints the screen: the table and the CSV cannot disagree.
A CSV is the whole picture. If what you want is to find out what is coming in — the day's insider trades, who reports tomorrow, the reports — that goes through the feeds, in RSS and JSON Feed, also with no account.
Do not want the whole file, just one figure inside your own page? There are embeddable widgets: a company's earnings date or its insider buying, in an <iframe> with no JavaScript and no cookies.
S&P 500 earnings announcements, with their time of day
One row per 8-K filing carrying item 2.02: the announcement date, the New York time it reached EDGAR, which session that falls in, the accession number and a link to the original filing. 65,097 announcements from 808 companies, 42,537 of them already paired with their 10-Q or 10-K.
Download the CSVThe DATE and the link are firm. The time and the session are PROVISIONAL: the EDGAR stamp is when the SEC finished processing the submission, and the press release is usually already on the company site. The file itself counts, in its comment lines, how many rows are exposed to that latency.
Field dictionary (16)
| Column | What it is |
|---|---|
cik | SEC Central Index Key. The stable identity: tickers get recycled, CIKs do not. |
ticker | Trading symbol at download time. A free-text field, not an identity. |
company | Company name as it appears on the filing. |
announcement_date | Date of the earnings announcement (YYYY-MM-DD). |
session | Session the filing arrived in: before_open, during_session, after_close or unknown. PROVISIONAL, see the limits. |
time_et | New York time the filing reached EDGAR (HH:MM). An UPPER BOUND on when the information existed. |
filing_date | Day the filing reached EDGAR. Not always announcement_date: when they differ, session and time_et describe filing_date. |
accepted_raw | The EDGAR acceptance stamp as given, unconverted, so anyone can redo the conversion. |
time_convention | Which clock that company's stamps came in: utc, ny or inconsistent. inconsistent means the two clues disagreed and no time is published. |
date_source | Where announcement_date comes from: reportDate (the 8-K cover box) or edgarEntry (the day it arrived). |
date_uncertain | yes when the 8-K cover box was more than three days from the actual filing and the date was taken from the filing. |
form | Filing type: 8-K, 8-K/A… |
items | Every item declared on that 8-K, comma separated. |
rule | The item that makes this filing an earnings release: 2.02, or 12 under the numbering used before 2004-08-23. |
accession | EDGAR accession number. |
sec_url | Link to the original filing at sec.gov. |
When each company reports: one row per company
The summary of the file above: for each of the 509 companies with a page here, its usual session, its median time, its most frequent weekday and how many sessions it typically takes to file the 10-Q or 10-K after the announcement. This is the one you read at a glance; the dataset proper is the one above.
Download the CSVField dictionary (20)
| Column | What it is |
|---|---|
ticker | Trading symbol at download time. A free-text field, not an identity. |
cik | SEC Central Index Key. The stable identity: tickers get recycled, CIKs do not. |
company_sec_name | Company name according to the SEC. |
quarters_on_file | Quarters on file for that company. |
first_announcement | Its earliest announcement. |
last_announcement | Its most recent announcement. |
last_paired_quarter | The last quarter already paired with its 10-Q or 10-K. |
window_quarters | Recent quarters the medians are computed over. |
usual_session | Its dominant session over that window. |
usual_session_count | How many of those quarters fall in the dominant session. |
window_with_time | How many of those quarters carry a publishable time. |
before_open | Quarters announced before 09:30 New York. |
during_session | Quarters announced while the market was open. |
after_close | Quarters announced at 16:00 or later. |
no_time | Quarters with no publishable time. |
median_time_ny | Median announcement time, New York time. |
most_frequent_weekday | Most frequent weekday. |
median_days_after_quarter_end | Median calendar days from quarter end to announcement. |
median_lead_calendar_days | Median calendar days from announcement to the 10-Q or 10-K. |
median_lead_sessions | Median trading sessions from announcement to the 10-Q or 10-K. |
What insiders buy and sell (Form 4, Table I)
42,735 non-derivative transactions filed by officers and directors of S&P 500 companies, each with its official code, its amount, whether it ran under a 10b5-1 plan and a link to the original Form 4. Filterable by company, type and dates through URL parameters.
Download the CSVCoverage runs on the FILING date, not the trade date. Form 4 allows late reporting, so some rows carry a trade_date years earlier, and a few carry an impossible date typed by the filer: they are published as filed, uncorrected. An unfiltered download returns at most 50,000 rows, and the file says so in its header when it trims.
Field dictionary (24)
| Column | What it is |
|---|---|
trade_date | Date of the reported transaction. |
filed_date | Date the Form 4 was filed. The file's coverage window runs on this date. |
ticker | Trading symbol at download time. A free-text field, not an identity. |
company | Company name as it appears on the filing. |
insider | Filer name as typed on the form. Free text: the same person shows up spelled several ways. |
role | Their role according to the form. |
code | Official transaction code (P open-market buy, S sale, A grant, M exercise…). |
type | How Quant500 classifies the row: buy, sell or other. |
shares | Shares in the transaction. |
price_usd | Price per share in dollars, if the form carries one. |
amount_usd | Amount in dollars. |
pct_of_stake | What share of their holding the transaction represents. |
shares_after | Shares held after, according to the form. |
scheduled_10b5_1 | yes when the form ticks the 10b5-1 box (a sale scheduled in advance). |
exercise_and_sell | yes when the sale sits next to an option exercise on the same form. |
security | Which security was traded. |
sec_filing_url | Link to the original Form 4 at sec.gov. |
filer_cik | The filer's CIK. This is what lets you group by PERSON, since the name is free text. |
relationship | Their relationship to the company, from the form's check boxes. |
ownership_nature | Direct or indirect ownership. |
report_period | Period the form refers to. |
remarks | The filer's remarks. |
footnotes | The form's footnotes, together in one cell with their numbers. Without them a code J row means nothing. |
internal_transfer | yes when the row is one leg of a transfer between accounts. That is why its type is other even when the code is P or S. |
The multi-factor ranking for the latest session
The 466 companies in the 2026-09-24 session universe, ordered by the multi-factor score, with their four Z-Scores (momentum, value, quality and growth) and the closing price. Switch the factor parameter to momentum, value, quality or growth for each list on its own.
Download the CSVA list ordered by a public number does not say anything is a better investment than anything else. Not advice, and not a personal recommendation.
Field dictionary (9)
| Column | What it is |
|---|---|
rank | Rank in that session's list. |
ticker | Trading symbol at download time. A free-text field, not an identity. |
sector | Sector as given by the market-data provider. Similar to GICS, but not GICS. |
z_multifactor | The factor score, in Z-Scores against that day's universe. Higher means the factor ranks that company better. |
momentum_z | Momentum Z-Score against that day's universe. |
value_z | Value Z-Score against that day's universe. |
quality_z | Quality Z-Score against that day's universe. |
growth_z | Growth Z-Score against that day's universe. |
price_usd | Price per share in dollars, if the form carries one. |
The walk-forward curve of a simulated portfolio
332 monthly rebalances of the simulated "S&P 500 Multifactorial (Top 20)" portfolio since 1998-12-31: at each date, the portfolio and benchmark levels rebased to 100 and that month's return. Switch the id parameter for any of the other model portfolios.
Download the CSVThis curve is a SIMULATION over historical data, not a live track record: no fees, no taxes, and past performance does not guarantee future returns. At each date the portfolio is picked using only data prior to that date (walk-forward).
Field dictionary (5)
| Column | What it is |
|---|---|
date | Rebalance date. |
portfolio_base100 | Simulated portfolio level, base 100. |
benchmark_base100 | Benchmark level, base 100: the equal-weight S&P 500 the engine computes from each date's index members, not the RSP ETF. |
month_return_portfolio_pct | The simulated portfolio's return for the month, per cent. |
month_return_benchmark_pct | The benchmark's return for the month, per cent. |
Licence
Anything derived from SEC filings — the earnings announcements and the insider trades — is CC0 1.0: the underlying filings are US government records. You may copy, redistribute and use them commercially without asking. Citation is not required; it is appreciated, and mostly it helps the next reader know where the number came from.
The multi-factor ranking and the model-portfolio curves are our own computation and are published under the Quant500 terms.
How to cite
There is no DOI yet. We are not inventing one: each dataset's stable identifier is the canonical URL of its page, which is what the identifier field of its JSON-LD declares. Suggested format:
Gràcia Serrahima, P. (2026). S&P 500 earnings announcements, with their time of day [data set]. Quant500. https://quant500.com/api/descarga/anuncios.csv (data through 2026-09-24; accessed 2026-09-25).
In BibTeX:
@misc{quant500_anuncios_2026, author = {Gr\`{a}cia Serrahima, Pol}, title = {{S&P 500 earnings announcements, with their time of day}}, year = {2026}, howpublished = {\url{https://quant500.com/api/descarga/anuncios.csv}}, note = {Quant500; data through 2026-09-24; accessed 2026-09-25} }
When you quote a figure, copy the date of the data with it: most of them change every trading day, and a figure without its date stops being true the next morning.
What we do not publish, and why
- Historical price and fundamentals series from a commercial provider. Their licence allows publishing derived results and forbids redistributing the data. That is why the long-history simulator publishes curves and never the grid behind them.
- Prices and market cap as a historical series. They come from a market-data provider and are not redistributed. The closing price in the ranking is there as context for the row, not as a series.
- Nothing about users. No download on this page contains data about anyone registered here.
When a value is missing the file says so: an empty cell means the filing did not carry it, never that nobody looked, and it is never filled in with an estimate. The quality flags travel inside the CSV (date_uncertain, time_convention, internal_transfer) instead of being quietly cleaned away.
How each number is computed, with its formulas and its limits: Methodology. The concepts, explained with examples: guides. Model results are SIMULATED over historical data: they are not a live track record, past performance does not guarantee future returns, and none of this is financial advice or a personal recommendation.