Explore more topics
Market-data lake

lake.political_trades dataset schema

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

Query name
lake.political_trades
Storage partition
year
Columns
36
Jump to a section

Columns and types

VARCHAR

  • chamber
  • docId
  • sourceTransactionId
  • filerFirst
  • filerLast
  • owner
  • ownerCodeRaw
  • action
  • actionCodeRaw

INTEGER

  • rowIndex

BOOLEAN

  • partialSale

DATE

  • transactionDate

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

Current logical schema for lake.political_trades

Inspect the complete lake.political_trades schema

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

chamberVARCHAR
docIdVARCHAR
rowIndexINTEGER
sourceTransactionIdVARCHAR
filerFirstVARCHAR
filerLastVARCHAR
ownerVARCHAR
ownerCodeRawVARCHAR
actionVARCHAR
partialSaleBOOLEAN
actionCodeRawVARCHAR
transactionDateDATE
notificationDateDATE
filingDateDATE
availableAtTIMESTAMP
availabilitySourceVARCHAR
assetDescriptionVARCHAR
printedTickerVARCHAR
resolvedTickerVARCHAR
resolutionStatusVARCHAR
resolutionReasonVARCHAR
assetTypeCodeVARCHAR
assetTypeLabelVARCHAR
amountBracketVARCHAR
amountLowDOUBLE
amountHighDOUBLE
capGainsOver200BOOLEAN
commentVARCHAR
filingStatusVARCHAR
sourceUrlVARCHAR
rawArchiveKeyVARCHAR
rawSha256VARCHAR
filerKeyVARCHAR
memberIdVARCHAR
displayNameVARCHAR
identitySourceVARCHAR

Current logical schema for lake.political_trades

Query lake.political_trades 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

Raw filed transaction rows; reports and amendments can repeat a trade. Prefer political_trade_events for counts, signals, rankings, or performance.

Inspect a raw filed trade

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.

The amount is a disclosed range, and transactionDate precedes public availability in many records. Reports can repeat or amend a trade; use political_trade_events for counts, signals or performance.

SQL
SELECT chamber, docId, rowIndex, memberId, displayName, availableAt,
       transactionDate, action, owner, printedTicker, resolvedTicker, amountLow, amountHigh
FROM lake.political_trades
WHERE availableAt >= TIMESTAMP '2026-09-01'
  AND availableAt < TIMESTAMP '2026-09-19'
ORDER BY availableAt, chamber, docId, rowIndex
LIMIT 20;

Submit the political_trades 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_trades 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_trades-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

Raw filed transaction rows; reports and amendments can repeat a trade. Prefer political_trade_events for counts, signals, rankings, or performance.

`availableAt` is the point-in-time column: filter `availableAt <= as_of`. `transactionDate` is when the trade happened, often weeks before it was disclosed; it is never availability.

One row per transaction printed on a filing whose extraction succeeded. A member can report the same trade again or amend it, so one trade can appear in several rows. Count or sum trades in `political_trade_events`.

`action` is `purchase`, `sale`, `exchange` or `unmarked` (the form marked no type), and `partialSale` is true only on a partial sale. `owner` is `self`, `spouse`, `joint`, `dependent_child` or `not_indicated`.

Each row carries its filing's identity (`memberId`, `displayName`, `identitySource`), described under `political_filings`. Group politicians by `memberId`, never by `filerFirst`/`filerLast`. Rows with `identitySource` `non_member` are filed by staff or candidates and have no events.

`amountLow` and `amountHigh` bound the reported amount range and are NULL where the form gives no bound; `amountBracket` is the range as reported.

`sourceUrl` is the original government page or PDF of the filing the row was printed on (House Clerk PDF or Senate eFD report); `rawArchiveKey` and `rawSha256` name the exact archived copy that was read.

`printedTicker` is the ticker as printed on the form, kept as printed. A row that printed none is resolved by name: `resolutionStatus` is `resolved` with `resolvedTicker` when two reads named the ticker and it was confirmed against price data and the registered issuer, `not_public_equity` for bonds, mutual funds, government debt and private holdings, and `unresolved` with a `resolutionReason` otherwise. Rows with a printed ticker have `resolutionStatus` `printed`.

Discussion

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

No comments yet.