SEC Standardized Text
- Requires a SEC Standardized Text subscription.
- Every SEC html, (most) pdf, and text files converted to columnar format.
- Datasets and SQL queries are updated as new filings come up.
Parsed using doc2struct.
Daily datasets are combined at 06:00 UTC Tuesday–Saturday. For daily downloads, we recommend pulling after 09:00 UTC.
Data
accessionNumber + sequence identifies a document. id identifies the order of elements within a document.
Table (16 rows)
| Column | Meaning | Example |
|---|---|---|
| accessionNumber | Filing accession number` | 110465923015159 |
| sequence | Document order in the filing | 23 |
| filingDate | filing date | 2026-01-02 |
| filename | filename | filename2.txt |
| documentType | SEC document type | LETTER |
| id | Sequential output row number, starting at 0 | 3 |
| level | Nesting depth within the document | 2 |
| type | title, text, textsmall, table, image, list, or redundant | "table" |
| text | Text content; image alt text for images; associated title for tables. null for lists | "Consolidated Balance Sheets" |
| matrix | Tables: rows of cell strings. Lists: [relative_depth, item_text] pairs, both strings. null otherwise | [["Year", "Revenue"], ["2025", "100"]] |
| cleaned | Table cleanup changes and unresolved issues, represented as a list of strings. null for other types | ["removed_empty_rows", "merged_header_rows"] |
| preamble | Table rows only: associated text before the table, or null | "Amounts in millions." |
| footnotes | Table rows only: list of [id, text] pairs, or null | [["(1)", "Includes discontinued operations."]] |
| postamble | Table rows only: associated text following the table’s footnotes, or null | "See accompanying notes to the financial statements." |
| class | Classification assigned by the SEC rules | "item" |
| standardizedTitle | Normalized identifier for a recognized heading; otherwise null | "item1a" |
Download Dataset
Download a filing year, including newly processed filings:
from datamulehub import datasets
datasets.download(
"standardized_text",
year=2026,
filename="standardized_text_2026.parquet",
)
Use from_storage="daily" for the published yearly snapshot, or "delta" for recent per-filing outputs only.
Download all parsed documents from one filing:
datasets.download(
"standardized_text",
accession=["0000320193-24-000123"],
filename="filing_text.parquet",
)
Query Database
Athena exposes column names in lowercase: standardizedTitle in Parquet is standardizedtitle in SQL.
Find risk-factor headings in 10-K documents:
from datamulehub import databases
rows = databases.read_query(
"""
SELECT *
FROM standardized_text
WHERE documenttype = '10-K'
AND type = 'table'
AND filingdate >= '2024-01-01'
AND filingdate < '2025-01-01'
LIMIT 10
"""
)
print(rows)
Use databases.query(sql, output_dir="results") to save query results as Parquet files instead.