Explore more topics
Market-data lake

lake.political_filings dataset schema

Column types and research semantics for NexusTrade’s lake.political_filings dataset. Read the supported schema before submitting a bounded SQL query.

Jump to a section

TL;DR

Use a politician's memberId across filed name spellings, and use availableAt rather than transaction dates to establish when a disclosure could inform research. Count failed and unsupported filings when checking coverage. An ok extraction status means trades were read, not that every cell is correct. Retain the source, extraction contract and amendment dates before joining these filing records to trades.

Query name
lake.political_filings
Storage partition
year
Columns
26

Columns and types

VARCHAR

  • chamber
  • docId
  • filerFirst
  • filerLast
  • filerSuffix
  • stateDistrict
  • availabilitySource
  • sourceUrl
  • rawArchiveKey
  • rawSha256

DATE

  • filingDate

TIMESTAMP

  • availableAt

Showing 12 of 26 recorded rows. The complete table is below.

Current logical schema for lake.political_filings

Inspect the complete lake.political_filings schema

Scroll sideways to compare all columns. Select a heading to sort.

chamberVARCHAR
docIdVARCHAR
filerFirstVARCHAR
filerLastVARCHAR
filerSuffixVARCHAR
stateDistrictVARCHAR
filingDateDATE
availableAtTIMESTAMP
availabilitySourceVARCHAR
sourceUrlVARCHAR
rawArchiveKeyVARCHAR
rawSha256VARCHAR
parseMethodVARCHAR
extractionStatusVARCHAR
failureReasonVARCHAR
extractedRowsINTEGER
extractionModelVARCHAR
contractVersionVARCHAR
ocrArchiveKeyVARCHAR
amendedReportDateDATE
reportDateDATE
processedAtTIMESTAMP
filerKeyVARCHAR
memberIdVARCHAR
displayNameVARCHAR
identitySourceVARCHAR

Current logical schema for lake.political_filings

Query lake.political_filings using the column names and types below. The query validator and engine use this logical catalog; a field absent from an older shard returns typed NULL.

What this table contains

The logical view is backed by canonical manifest-resolved data. Query this name rather than guessing a physical database collection or object-storage path.

Inspect disclosure identity and extraction completeness

Query example, not executed here. The dates and filters define the proposed research scope; returned rows and current coverage must be checked in your workspace.

extractionStatus tells whether trades were extracted; ok does not guarantee every extracted cell is correct. memberId is the member identity across spellings. Keep failed and unsupported filings visible when assessing completeness.

SQL
SELECT chamber, docId, memberId, displayName, availableAt,
       extractionStatus, extractedRows, failureReason, sourceUrl
FROM lake.political_filings
WHERE availableAt >= TIMESTAMP '2026-09-01'
  AND availableAt < TIMESTAMP '2026-09-19'
ORDER BY availableAt, chamber, docId
LIMIT 20;

Submit the political_filings example and read back its parts

Run the exact SQL through the Python SDK

Save this page's SQL as query.sql and the runner below as query.py. Use a registered key with lake scope from Developers. The runner submits the displayed political_filings query once, saves its operation, waits on that same ID, saves the returned manifest and downloads its Parquet parts.

This submission has not been executed for the reference page. Inspect the SQL, dates and resource limits before running it. Reuse the request key only for this identical SQL and limits; use a new key when changing them.

Shell
python3 -m pip install nexustrade==1.42.0
export NEXUSTRADE_API_KEY="YOUR_LAKE_SCOPED_KEY"
python3 query.py

Python
import json
from pathlib import Path
from nexustrade import NexusTradeClient

# Save the SQL displayed on this page as query.sql.
sql = Path("query.sql").read_text()
client = NexusTradeClient.from_environment()
operation = client.create_lake_query(
    {"query": sql, "limits": {"timeoutSeconds": 30, "maxRows": 50,
                              "maxResultBytes": 1048576}},
    idempotency_key="reference-political_filings-20261012-v1",
)
Path("query-operation.json").write_text(json.dumps(operation, indent=2))
finished = client.wait_for_lake_query(operation["id"])
if finished["status"] != "completed":
    raise RuntimeError(finished)
manifest = client.get_lake_query_manifest(operation["id"])["result"]
Path("query-manifest.json").write_text(json.dumps(manifest, indent=2))
print(json.dumps(manifest, indent=2))
for part in manifest["parts"]:
    Path(f"query-{part['part']}.parquet").write_bytes(
        client.download_lake_query_part(operation["id"], part["part"], max_bytes=1048576)
    )

Coverage and timing

Inspect source coverage and timing before using the rows

The logical view is backed by canonical manifest-resolved data. Query this name rather than guessing a physical database collection or object-storage path.

House and Senate periodic transaction reports, one row per indexed filing. `availableAt` is the point-in-time column: a filing may inform a decision only when `availableAt <= as_of`. It comes from the date named in `availabilitySource`, the House disclosure index filing date or the Senate eFD filed date. Never use a transaction date as availability.

Filings whose trades were not extracted are rows too, so completeness is a query. `extractionStatus` is `ok` when the filing's trades are in `political_trades`, `failed` with a `failureReason` when extraction did not finish (the daily job retries it), and `unsupported` for a source form with no gated extraction.

`ok` means a filing was read, not that every value is right: the rows are what a model read from the filed page, and known-hard cells are dense micro-print dates and checkbox columns that share a bound. `contractVersion` and `extractionModel` say what read a filing, so rows read by an older contract can be found; a filing is read again and its rows replaced whole when an operator names it.

Filer identity: `memberId` is the member's Bioguide ID from congress-legislators and `displayName` is their official name. One person has one `memberId` across every spelling of the filed name and across both chambers, so identify, group and filter politicians by `memberId` and show `displayName`; `filerFirst` and `filerLast` are the name as filed and vary between filings. `identitySource` is `legislators` or `override` for a member, `non_member` for a House employee or candidate who never served (`memberId` NULL), and `unresolved` when no member could be decided. When the question names a person, a `# Politician identity` section carries the resolved `memberId` — filter by that literal and never re-derive identity from `displayName`.

`parseMethod` is how the filing was read: `text` and `scan` are House PDFs with and without a usable text layer, `html` and `paper` are Senate electronic and paper reports. `amendedReportDate` is set on a filing that amends an earlier report. `reportDate` is the date a Senate eFD report title prints; a report and its numbered amendments share it, and it can differ from `filingDate`.

Discussion

Sign in or create a free account to join the discussion.

No comments yet.