Explore more topics
Market-data lake

lake.insider_owner_events dataset schema

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

Jump to a section

TL;DR

Use insider_owner_events to inspect a specific owner's public transaction versions, resolving the exact owner CIK rather than matching a name loosely. Apply publication, version and coverage cutoffs before counting signals; use firstAvailableAt for trailing windows and deduplicate eventId for company totals. Missing transaction value is unknown, not zero. A public follower enters after publication at a tradable price, not the insider's reported price. This reference's query is unexecuted and does not establish anyone's personal returns.

Query name
lake.insider_owner_events
Storage partition
year
Columns
29

Columns and types

BOOLEAN

  • eligibleShare
  • eligibleOption
  • eligibleAward

VARCHAR

  • instrument
  • rowKind
  • eventId
  • ownerCik
  • ownerName
  • issuerCik
  • resolvedTicker
  • securityTitle
  • sourceAccession

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

Current logical schema for lake.insider_owner_events

Inspect the complete lake.insider_owner_events schema

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

eligibleShareBOOLEAN
eligibleOptionBOOLEAN
eligibleAwardBOOLEAN
instrumentVARCHAR
rowKindVARCHAR
eventIdVARCHAR
ownerCikVARCHAR
ownerNameVARCHAR
issuerCikVARCHAR
resolvedTickerVARCHAR
securityTitleVARCHAR
sourceAccessionVARCHAR
versionAccessionVARCHAR
rowSkVARCHAR
firstAvailableAtTIMESTAMP
availableAtTIMESTAMP
supersededAtTIMESTAMP
coverageUnverifiedAtTIMESTAMP
transactionDateDATE
tickerIdentityDateDATE
transactionCodeVARCHAR
acquiredDisposedVARCHAR
sharesDOUBLE
pricePerShareDOUBLE
totalValueDOUBLE
isOfficerBOOLEAN
isDirectorBOOLEAN
isTenPercentOwnerBOOLEAN
sourceArchiveKeyVARCHAR

Current logical schema for lake.insider_owner_events

Query lake.insider_owner_events 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 eligible owner purchase versions before a cutoff

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 example uses the instant just before September 19 UTC and a first-publication window. Values and coverage must still be valid at that instant. Several owners can share eventId; company totals need event deduplication. For an exact-owner question add the directory-resolved ownerCik, not a guessed name match.

SQL
SELECT eventId, ownerCik, ownerName, resolvedTicker, firstAvailableAt,
       availableAt, shares, totalValue
FROM lake.insider_owner_events
WHERE firstAvailableAt >= TIMESTAMP '2026-09-01'
  AND firstAvailableAt < TIMESTAMP '2026-09-19'
  AND availableAt < TIMESTAMP '2026-09-19'
  AND (supersededAt IS NULL OR supersededAt >= TIMESTAMP '2026-09-19')
  AND (coverageUnverifiedAt IS NULL OR coverageUnverifiedAt >= TIMESTAMP '2026-09-19')
  AND eligibleShare IS TRUE
  AND transactionCode = 'P' AND acquiredDisposed = 'A' AND shares > 0
ORDER BY firstAvailableAt, eventId, ownerCik
LIMIT 20;

Submit the insider_owner_events 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 insider_owner_events 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-insider_owner_events-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.

One relation per exact owner CIK and transaction version. Select ownerCik exactly, and optionally issuerCik for a company such as Oscar Health; names/tickers resolve through the owner/company directory. Roles constrain that same owner row.

As of T: firstAvailableAt <= T AND availableAt <= T AND (supersededAt IS NULL OR T < supersededAt) AND (coverageUnverifiedAt IS NULL OR T < coverageUnverifiedAt). The trailing window uses firstAvailableAt, never transactionDate or a correction's availableAt. Purchases require transactionCode P, acquiredDisposed A, shares > 0; sales S/D. Unknown corrections are unverified, never appended as fresh buys.

For aggregate company totals, deduplicate by eventId before SUM/COUNT: joint filings have several owners. For distinct buyer counts, COUNT(DISTINCT ownerCik) is correct. Missing totalValue is unknown, not zero.

Public followers enter at the next tradable session/price after publication, not pricePerShare. These are signals, not actual personal returns; best-strategy requests require the verified strategy leaderboard, not raw transaction dollars.

Discussion

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

No comments yet.