Datamule SEC Filings Metadata
- Requires a Metadata subscription.
- Filing headers, associated entities, former company names, fund series and classes, filer profiles and name history, document metadata, accession-to-CIK mappings, monitor dumps, and realtime filing detections.
- The five filing metadata tables include newly processed filings in SQL queries by default; use
from_storage="daily"for cheaper daily-only queries. Other historical datasets update daily. Fastest SEC Filings Metadata is updated in realtime.
Usage
See the dataset documentation for download and query options, and products for pricing.
The Metadata subscription includes twelve queryable tables:
submissions_metadatafiler_metadatafiler_namessec_submission_details_tablesec_accession_cik_tablesec_documents_tablemonitor_dumpsfiling_metadata_filingsfiling_metadata_entitiesfiling_metadata_former_companiesfiling_metadata_seriesfiling_metadata_classes
It also includes the fastest_sec_filings_metadata API for querying realtime filing detections.
Query Database
Use datamulehub.databases.query when you want Athena to run SQL and write the result as Parquet files.
from datamulehub import databases
databases.query(
"""
SELECT
accessionnumber,
cik,
"form",
filingdate,
reportdate,
primarydocument
FROM submissions_metadata
WHERE filingdate >= '2024-01-01'
AND "form" IN ('10-K', '10-Q')
LIMIT 1000
""",
output_dir="metadata_sample",
)
This writes one or more Parquet files to metadata_sample.
You can also join metadata tables. For example, this joins submission details, accession-to-CIK mappings, and document rows:
from datamulehub import databases
databases.query(
"""
SELECT
d.accessionnumber,
c.cik,
d.submissiontype,
d.filingdate,
doc.sequence,
doc.documenttype,
doc.filename,
doc.description
FROM sec_submission_details_table d
JOIN sec_accession_cik_table c
ON d.accessionnumber = c.accessionnumber
JOIN sec_documents_table doc
ON d.accessionnumber = doc.accessionnumber
WHERE d.submissiontype = '10-K'
AND d.filingdate >= '2024-01-01'
AND doc.documenttype = '10-K'
LIMIT 1000
""",
output_dir="ten_k_documents",
)
The filing metadata tables contain the header fields recorded in each filing. For example, this joins filing headers and entities with the submission details lookup:
from datamulehub import databases
databases.query(
"""
SELECT
f.accessionnumber,
f.filingdate,
d.submissiontype,
e.entity_cik,
e.entity_role,
e.company_data__conformed_name,
e.company_data__assigned_sic
FROM filing_metadata_filings f
JOIN sec_submission_details_table d
ON f.accessionnumber = d.accessionnumber
JOIN filing_metadata_entities e
ON f.accessionnumber = e.accessionnumber
WHERE d.submissiontype = '10-K'
AND f.filingdate >= '2024-01-01'
AND e.entity_role = 'filer'
LIMIT 1000
""",
output_dir="ten_k_filing_entities",
)
Filer profiles and name history can also be joined by CIK:
from datamulehub import databases
databases.query(
"""
SELECT
f.cik,
f.name AS current_name,
f.tickers,
n.name,
n.start_date,
n.end_date
FROM filer_metadata f
JOIN filer_names n ON f.cik = n.cik
WHERE f.cik = 789019
""",
output_dir="filer_name_history",
)
Read Query
Use datamulehub.databases.read_query when you want a small query result back in Python instead of keeping the Parquet files.
from datamulehub import databases
rows = databases.read_query(
"""
SELECT
accession,
source,
detected_time
FROM monitor_dumps
WHERE source = 'anticipate'
LIMIT 10
"""
)
print(rows)
read_query downloads the Parquet result files to a temporary directory, reads them, and returns the rows.
Download Dataset
Use datamulehub.datasets.download when you want a full metadata dataset.
from datamulehub import datasets
datasets.download(
"submissions_metadata",
filename="submissions_metadata.parquet",
)
datasets.download(
"sec_submission_details_table",
filename="sec_submission_details_table.parquet",
)
datasets.download(
"sec_accession_cik_table",
filename="sec_accession_cik_table.parquet",
)
datasets.download(
"sec_documents_table",
filename="sec_documents_table.parquet",
)
datasets.download(
"filer_metadata",
filename="filer_metadata.parquet",
)
datasets.download(
"filer_names",
filename="filer_names.parquet",
)
The five filing metadata tables also support from_storage. Use daily for the full daily dataset, delta for recent per-filing data, or both to add recent filings not yet in the daily dataset. The default is both.
from datamulehub import datasets
# Full daily dataset.
datasets.download(
"filing_metadata_filings",
filename="filing_metadata_filings.parquet",
from_storage="daily",
)
# Full dataset plus recent filings. Deduplicated.
datasets.download(
"filing_metadata_entities",
filename="filing_metadata_entities.parquet",
)
datasets.download(
"filing_metadata_former_companies",
filename="filing_metadata_former_companies.parquet",
)
datasets.download(
"filing_metadata_series",
filename="filing_metadata_series.parquet",
)
datasets.download(
"filing_metadata_classes",
filename="filing_metadata_classes.parquet",
)
monitor_dumps is organized by date in S3, so the easiest way to work with it is usually through databases.query or databases.read_query.
fastest_sec_filings_metadata
Query detections from the Fastest SEC Filings service through datamulehub.databases. Usage costs $10 per million records returned, with a minimum charge of $0.001 per query.
Use read_query to return the records in Python:
from datamulehub import databases
rows = databases.read_query(
"""
SELECT *
FROM fastest_sec_filings_metadata
ORDER BY detected_time DESC
LIMIT 100
"""
)
print(rows)
Use query to write the result as a Parquet file:
from datamulehub import databases
databases.query(
"""
SELECT accession, ciks, submission_type, detected_time, detection_method
FROM fastest_sec_filings_metadata
WHERE detection_method = 'index_url'
LIMIT 100
""",
output_dir="fastest_filings_metadata",
)
Supported query shapes are:
- Look up one exact
accession. - Return the latest filings overall with
ORDER BY detected_time DESC. - Filter or order by a
detected_timerange. Detection times are Unix timestamps in milliseconds. - Filter by one of
cik,submission_type, ordetection_method.
A cik, submission_type, or detection_method filter cannot be combined with a detected_time filter or ORDER BY. For example, filtering by detection_method = 'index_url' returns matching records, but does not mean the latest matching records.
Exact accession lookup:
SELECT *
FROM fastest_sec_filings_metadata
WHERE accession = '0001104659-23-015159'
Detected-time range:
SELECT *
FROM fastest_sec_filings_metadata
WHERE detected_time >= 1756684800000
AND detected_time < 1756771200000
ORDER BY detected_time ASC
LIMIT 1000
Each result contains:
Table (5 rows)
| Field | Description |
|---|---|
accession | Canonical accession number without leading zeroes or dashes. |
ciks | All CIKs associated with the filing. |
submission_type | SEC submission type, such as 10-K or 4. |
detected_time | Unix timestamp in milliseconds when the filing was detected. |
detection_method | Monitor that first detected the filing, such as rss, efts, or index_url. |
Tables
Schemas below use the Athena table and column names from athena_tables.json.
filer_metadata
SEC filer profiles with current names, tickers, exchanges, industry codes, and addresses. Includes individuals and companies with or without tickers. Extracted from the SEC bulk submissions data.
Athena table and dataset name: filer_metadata
Table (31 rows)
| Column |
|---|
cik |
name |
entitytype |
sic |
sicdescription |
ownerorg |
ein |
description |
category |
fiscalyearend |
stateofincorporation |
stateofincorporationdescription |
phone |
flags |
mailing_street1 |
mailing_street2 |
mailing_city |
mailing_stateorcountry |
mailing_zipcode |
mailing_stateorcountrydescription |
business_street1 |
business_street2 |
business_city |
business_stateorcountry |
business_zipcode |
business_stateorcountrydescription |
start_date |
tickers |
exchanges |
insidertransactionforownerexists |
insidertransactionforissuerexists |
cik is an integer. tickers and exchanges are arrays of strings. Missing values are null.
filer_names
Current and former SEC filer names. One filer can have several name records. Extracted from the SEC bulk submissions data.
Athena table and dataset name: filer_names
Table (4 rows)
| Column |
|---|
cik |
name |
start_date |
end_date |
Dates use YYYY-MM-DD strings. end_date is null for the current name. Name dates come from SEC name history, falling back to filing history when needed; they are not incorporation dates.
submissions_metadata
Comprehensive filing metadata extracted from the SEC bulk submissions data.
Athena table and dataset name: submissions_metadata
Table (17 rows)
| Column |
|---|
cik |
accessionnumber |
filingdate |
reportdate |
acceptancedatetime |
act |
form |
filenumber |
filmnumber |
items |
core_type |
size |
isxbrl |
isinlinexbrl |
isxbrlnumeric |
primarydocument |
primarydocdescription |
Note: 'accessionnumber' here is e.g. '0001157523-05-000798'. whereas everywhere else it is 115752305000798. This will be fixed.
sec_submission_details_table
Small filing-level lookup table used by the SEC filings archive.
Athena table and dataset name: sec_submission_details_table
Table (6 rows)
| Column |
|---|
accessionnumber |
submissiontype |
filingdate |
reportdate |
detectedtime |
containsxbrl |
sec_accession_cik_table
Maps each accession number to one or more CIKs.
Athena table and dataset name: sec_accession_cik_table
Table (3 rows)
| Column |
|---|
filingdate |
accessionnumber |
cik |
sec_documents_table
Document-level metadata for files inside SEC submissions.
Athena table and dataset name: sec_documents_table
Table (8 rows)
| Column |
|---|
filingdate |
accessionnumber |
sequence |
documenttype |
filename |
description |
tarstartbyte |
tarendbyte |
Filing Metadata Tables
Metadata extracted from SEC filing headers and flattened into five tables. Document rows are available through sec_documents_table.
filing_metadata_filings
Filing-level fields from the SEC submission header, including submission type, acceptance time, reporting period, and filing values. Fields vary by submission type and header format.
Athena table and dataset name: filing_metadata_filings
Table (164 rows)
| Column |
|---|
accessionnumber |
abs_asset_class__list |
abs_asset_class |
abs_rule |
abs_sub_asset_class |
acceptance_datetime |
reported_accession__list |
reported_accession |
action_date |
business_address__city |
business_address__phone |
business_address__state |
business_address__street1 |
business_address__street2 |
business_address__zip |
calendar_year_ending |
category |
cik__list |
cik |
class_contract_id__list |
class_contract_id |
class_contract_name__list |
class_contract_name |
class_contract_ticker_symbol__list |
class_contract_ticker_symbol |
company_data__assigned_sic |
company_data__cik |
company_data__conformed_name |
company_data__fiscal_year_end |
company_data__irs_number |
company_data__state_of_incorporation |
confirming_copy__abs_asset_class |
confirming_copy__date_of_filing_date_change |
confirming_copy__depositor_cik |
confirming_copy__effectiveness_date |
confirming_copy__filing_date |
confirming_copy__group_members__list |
confirming_copy__group_members |
confirming_copy__items__list |
confirming_copy__items |
confirming_copy__multi_accession_numbers__accession_number__list |
confirming_copy__multi_accession_numbers__accession_number |
confirming_copy__period |
confirming_copy__period_start |
confirming_copy__public_document_count |
confirming_copy__series_and_classes_contracts_data__new_series_and_classes_contracts__owner_cik |
confirming_copy__sponsor_cik |
confirming_copy__sros__list |
confirming_copy__sros |
date_of_filing_date_change__list |
date_of_filing_date_change |
depositor_cik |
depositor_file_number |
documents__list |
effectiveness_date__list |
effectiveness_date |
file5__business_address__city |
file5__business_address__phone |
file5__business_address__state |
file5__business_address__street1 |
file5__business_address__zip |
file5__filing_values__act |
file5__filing_values__file_number |
file5__filing_values__film_number |
file5__filing_values__form_type |
file5__mail_address__city |
file5__mail_address__state |
file5__mail_address__street1 |
file5__mail_address__zip |
filed_pursuant_to_general_instruction_a2 |
filing_date__list |
filing_date |
filing_values__act |
filing_values__act__file_number |
filing_values__act__film_number |
filing_values__file_number |
filing_values__film_number |
filing_values__form_type |
fiscal_year_end__list |
fiscal_year_end |
group_members__list |
group_members |
ims_document |
ims_header |
irs_number__list |
irs_number |
is_filer_a_new_registrant |
is_filer_a_well_known_seasoned_issuer |
is_fund_24f2_eligible |
issuing_entity_cik |
issuing_entity_file_number |
issuing_entity_name |
item_information__list |
item_information |
item_number__list |
item_number |
item_period__list |
item_period |
items__list |
items |
l_add__mail_address__city |
l_add__mail_address__state |
l_add__mail_address__street1 |
l_add__mail_address__zip |
ma_i_individual |
mail_address__city |
mail_address__state |
mail_address__street1 |
mail_address__street2 |
mail_address__zip |
mic_info |
multi_accession_numbers__accession_number__list |
multi_accession_numbers__accession_number |
no_annual_activity |
no_initial_period_activity |
no_quarterly_activity |
originator_name |
owner_cik__list |
owner_cik |
period__list |
period |
period_start |
previous_accession_number |
privacy_enhanced_message |
proc_type |
public_document_count__list |
public_document_count |
public_reference_accession_number |
public_rel_date |
received_date |
reference_462b |
references_429__list |
references_429 |
registered_entity |
relationship__list |
relationship |
resource_ext_issuer |
rule_name__list |
rule_name |
rule__item__item_number |
rule__item__item_period |
rule__rule_name |
securitizer_cik |
securitizer_file_number |
series_and_classes_contracts_data__merger_series_and_classes_contracts__merger__acquiring_data__cik |
series_and_classes_contracts_data__merger_series_and_classes_contracts__merger__target_data__cik |
series_and_classes_contracts_data__new_series_and_classes_contracts__new_classes__3c865337c124 |
series_and_classes_contracts_data__new_series_and_classes_contracts__new_classes__460b17cbe862 |
series_and_classes_contracts_data__new_series_and_classes_contracts__owner_cik |
series_id__list |
series_id |
series_name__list |
series_name |
sponsor_cik |
sros__list |
sros |
state_of_incorporation__list |
state_of_incorporation |
type__list |
type |
under_writer_cik |
withdrawn_accession_number |
filingdate |
_sourcekey |
filing_metadata_entities
Athena table and dataset name: filing_metadata_entities
Table (53 rows)
| Column |
|---|
accessionnumber |
entity_cik |
entity_role |
business_address__address_is_a_non_us_location |
business_address__city |
business_address__non_us_state_territory |
business_address__phone |
business_address__province_country |
business_address__state__list |
business_address__state |
business_address__street1 |
business_address__street2 |
business_address__zip |
company_data__assigned_sic |
company_data__conformed_name |
company_data__ein |
company_data__fiscal_year_end |
company_data__irs_number |
company_data__legal_entity_identifier |
company_data__organization_name |
company_data__relationship |
company_data__state_of_incorporation |
date_changed |
filed_pursuant_to_general_instruction_a2 |
filing_values__act |
filing_values__file_number |
filing_values__film_number |
filing_values__form_type |
former_conformed_name |
is_filer_a_new_registrant |
is_filer_a_well_known_seasoned_issuer |
is_fund_24f2_eligible |
mail_address__address_is_a_non_us_location |
mail_address__city |
mail_address__non_us_state_territory |
mail_address__province_country |
mail_address__state |
mail_address__street1 |
mail_address__street2 |
mail_address__zip |
owner_data__assigned_sic |
owner_data__conformed_name |
owner_data__fiscal_year_end |
owner_data__legal_entity_identifier |
owner_data__organization_name |
owner_data__state_of_incorporation |
series_and_classes_contracts_data__merger_series_and_classes_contracts__merger__acquiring_data__cik |
series_and_classes_contracts_data__merger_series_and_classes_contracts__merger__target_data__cik |
series_and_classes_contracts_data__new_series_and_classes_contracts__new_classes__3c865337c124 |
series_and_classes_contracts_data__new_series_and_classes_contracts__new_classes__460b17cbe862 |
series_and_classes_contracts_data__new_series_and_classes_contracts__owner_cik |
filingdate |
_sourcekey |
filing_metadata_former_companies
Former company names and name-change dates recorded in filing headers. Join to filing_metadata_entities on accessionnumber, entity_cik, and entity_role.
Athena table and dataset name: filing_metadata_former_companies
Table (7 rows)
| Column |
|---|
accessionnumber |
entity_cik |
entity_role |
date_changed |
former_conformed_name |
filingdate |
_sourcekey |
filing_metadata_series
Fund series recorded in filing headers. owner_cik identifies the owner of the series.
Athena table and dataset name: filing_metadata_series
Table (6 rows)
| Column |
|---|
accessionnumber |
owner_cik |
series_id |
series_name |
filingdate |
_sourcekey |
filing_metadata_classes
Fund classes and contracts recorded in filing headers, including names and ticker symbols. Join to filing_metadata_series on accessionnumber, owner_cik, and series_id.
Athena table and dataset name: filing_metadata_classes
Table (8 rows)
| Column |
|---|
accessionnumber |
series_id |
owner_cik |
class_contract_id |
class_contract_name |
class_contract_ticker_symbol |
filingdate |
_sourcekey |
monitor_dumps
Detection-time records for Datamule filing monitors. The source field includes sources such as Efts, Rss, and anticipate.
Athena table name: monitor_dumps
Table (3 rows)
| Column |
|---|
accession |
source |
detected_time |