Datamule SEC Filings Metadata

Usage

See the dataset documentation for download and query options, and products for pricing.

The Metadata subscription includes twelve queryable tables:

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:

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)
FieldDescription
accessionCanonical accession number without leading zeroes or dashes.
ciksAll CIKs associated with the filing.
submission_typeSEC submission type, such as 10-K or 4.
detected_timeUnix timestamp in milliseconds when the filing was detected.
detection_methodMonitor 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