A static ownership graph answers “who owns what” — present tense, single snapshot. For most regulatory and audit work, that is the wrong question. FinCEN’s Beneficial Ownership Information rule (31 CFR §1010.380) requires reporting companies to update BOI within 30 days of any change in beneficial-owner identity, ownership percentage, or controlling-person status. A multi-year audit requires point-in-time ownership for each balance-sheet date reviewed. An exposure trajectory under the OFAC 50 Percent Rule (the Random Walks on DD Graphs article in this sub-series) needs the ownership graph as it existed on each date the underlying transactions occurred, not as it exists at the moment of analysis.
The right framework treats ownership as a temporal graph: each ownership relationship carries a validity interval, ownership-change events are modeled explicitly as nodes connected to the entities they affect, and point-in-time queries reconstruct the graph state at any historical timestamp. This article walks two representation patterns (time-bounded edges and versioned snapshots), the Cypher AS-OF query pattern, and the operational integration that turns a temporal graph into a year-end-audit-ready ownership artifact.
Why static ownership graphs fail audit and AML work
A counterparty’s ownership today often is not its ownership at the moment a covered transaction occurred. Ownership changes constantly: share purchases, divestitures, gifts, trust transitions, corporate reorganizations, control-block sales. Each event shifts who owns what percentage of which entity at a specific point in time. For most operational decisions today, the current snapshot is sufficient. For audit and regulatory work, point-in-time reconstruction is necessary.
Three concrete use cases illustrate the requirement. FinCEN BOI continuing-reporting demands that a reporting company file an update within 30 days of any change in beneficial owner. To reconcile a counterparty’s filed BOI against observed ownership behavior across an examination period, the practitioner needs ownership-as-of every filing-trigger date. Multi-period audit for fiscal-year financial statements requires the related-party identification (the Community Detection article in this sub-series) to be performed against the ownership graph as it existed at each balance-sheet date, not as it exists at the audit-report date. OFAC exposure trajectory through the Random Walks on DD Graphs article’s Personalized PageRank computation requires the ownership graph at each transaction date — otherwise the exposure calculation uses graph state that didn’t yet exist when the transactions occurred.
A static graph cannot answer these questions. The remedy is to extend the schema with time-validity metadata on relationships and explicit modeling of change events.
Two temporal-graph patterns
Two representation patterns dominate temporal-graph implementations.
Time-bounded edges. Each relationship carries a valid_from and a valid_to timestamp. An ownership edge with valid_from: 2022-03-15 and valid_to: 2024-09-30 records that the relationship was real-world-valid between those dates. The current-state edges have valid_to: null (a sentinel value indicating “currently valid; no end date known”). Point-in-time queries filter edges where valid_from <= as_of_date < valid_to (with null treated as positive infinity).
Versioned snapshots. Maintain separate graph instances for each as-of date of interest. Year-end-2022 ownership lives in a :Snapshot_2022_12_31 namespace, year-end-2023 in :Snapshot_2023_12_31. Queries against a specific snapshot use the namespace as a label filter. This pattern is operationally simpler for queries but storage-heavy and update-clumsy.
The right choice depends on the workload. For applications that need ownership-as-of arbitrary dates (audit work, transaction-date reconstruction), time-bounded edges are the right pattern — they support continuous time and accommodate sparse update events naturally. For applications that need a small fixed set of as-of dates (year-end snapshots for prior-period comparisons), versioned snapshots are simpler. Most production DD graphs use time-bounded edges as the primary store and materialize versioned snapshots as cached views for the most frequently-queried dates.
The AS-OF query pattern
The canonical Cypher pattern for point-in-time reconstruction filters edges by their validity interval against a parameterized as-of date.
// Schema: time-bounded ownership relationships
CREATE INDEX owns_valid_from IF NOT EXISTS FOR ()-[r:OWNS]-() ON (r.valid_from);
CREATE INDEX owns_valid_to IF NOT EXISTS FOR ()-[r:OWNS]-() ON (r.valid_to);
// AS-OF query: reconstruct ownership graph as of a specific date
WITH date('2024-12-31') AS as_of_date
MATCH (owner)-[r:OWNS]->(entity:Entity)
WHERE r.valid_from <= as_of_date
AND (r.valid_to IS NULL OR r.valid_to > as_of_date)
RETURN owner, entity, r.percentage AS pct_owned, r.valid_from, r.valid_to
ORDER BY entity.legal_name, r.percentage DESC;
The valid_to IS NULL clause handles the currently-valid case (no end date known). Using a sentinel null rather than a far-future date (like 9999-12-31) is the recommended convention for two reasons: it avoids the “what year did we put for ‘never-ending'” arbitrary choice, and it makes “did someone forget to set a valid_to on an old edge” diagnostically obvious (queries can flag null-valid-to edges that exist alongside newer same-relationship edges with assigned valid_from dates).
Index strategy matters at scale. Both valid_from and valid_to need indexes on the relationship; the article Loading and Maintaining Production-Scale DD Graphs in this sub-series covers the composite-index pattern that makes range scans on (valid_from, valid_to) performant at million-edge graph sizes.
Ownership-change events as nodes
Time-bounded edges record that a relationship was valid in a time window. Ownership-change events record what changed and why — the audit-trail discipline that converts a temporal graph into a regulatory artifact.
// Ownership-change event pattern: a ControlChange node connects before-state and after-state
CREATE (event:ControlChange {
event_uid: 'CC-2024-Q4-0142',
effective_date: date('2024-11-15'),
trigger_type: 'share_purchase',
filing_reference: 'BOI-2024-11-30-update-XX'
});
MATCH (e:Entity {legal_name: 'TargetCo'}),
(before_owner:Person {full_name: 'Prior Beneficial Owner'}),
(after_owner:Person {full_name: 'New Beneficial Owner'})
CREATE (before_owner)-[:OWNED_BEFORE {percentage: 60.0}]->(event),
(after_owner)-[:OWNS_AFTER {percentage: 55.0}]->(event),
(event)-[:AFFECTS]->(e);
The ControlChange node carries the metadata that the audit and regulatory frameworks require: the effective date, the trigger type (share_purchase, divestiture, gift, trust_transition, corporate_reorganization, control_block_sale, BOI_correction), and the filing reference linking the event to the regulatory filing that recorded it. The OWNED_BEFORE and OWNS_AFTER relationships preserve the before-state and after-state ownership percentages for direct comparison. The AFFECTS relationship to the entity makes the event discoverable through entity-centric queries (“show all control changes affecting Entity X across the engagement period”).
This pattern is heavier than time-bounded edges alone but earns its weight on regulatory reconciliation. When the practitioner needs to verify that a counterparty’s BOI filings match the observed ownership-change pattern across an examination period, the ControlChange-node history is the artifact the workpaper points to.
FinCEN BOI continuing-reporting integration
FinCEN’s BOI rule (31 CFR §1010.380) requires reporting companies to file an initial BOI report, then update the report within 30 days of any change in beneficial-owner identity, ownership percentage, or controlling-person status. The 30-day window starts from the date of the change, not from the end of the filing year or quarter. For practitioners reconciling a counterparty’s BOI filings against observed ownership behavior, two query patterns matter.
Filing-trigger detection. Identify ownership changes in the temporal graph that should have triggered a BOI update. The pattern: find every :ControlChange node with effective_date in the examination period, intersect with Entity nodes that are BOI reporting companies, check whether a corresponding filing_reference exists. Missing filing references are the candidate non-compliance findings.
Filing-content reconciliation. Compare the beneficial owners as filed against the beneficial owners implied by the temporal graph at the filing-trigger date. Mismatches between filed and implied ownership are the substantive non-compliance findings.
A critical caveat: BOI data, when actually accessed by a practitioner, is subject to specific access restrictions under the Corporate Transparency Act. BOI is not a public database. Authorized users — federal/state/local law enforcement, certain federal regulators, financial institutions accessing customer BOI under customer consent — access it through tightly-controlled channels. The methodology in this article assumes the practitioner has lawfully-obtained ownership data; the article does not instruct readers on how to access BOI directly. The articulation of the queries above is methodology, not a how-to for unauthorized access.
Note also that FinCEN’s March 2025 interim final rule narrowed BOI’s scope significantly: domestic U.S. entities are now exempt from BOI reporting; only certain foreign reporting companies remain in scope. Practitioners should verify current applicability of the BOI rule for any specific engagement before relying on the regulatory framing.
Multi-period audit application
For fiscal-year financial-statement audits, the AS 2410 related-party identification procedure (the Community Detection article in this sub-series) runs against the ownership graph at each balance-sheet date in scope. For a 3-year audit, that means three runs of the procedure against three temporal slices.
The pattern: parameterize the graph projection by as-of date. The :Entity and :Person node sets are stable (entities don’t usually unincorporate or persons un-exist); the :OWNS and :OFFICER_OF edges are filtered by the AS-OF predicate from §”The AS-OF query pattern” above. The result is three distinct community-detection runs that may produce different related-party cluster decompositions across periods. Differences across periods are themselves audit-significant — they identify counterparties that became (or ceased being) related parties during the engagement period, which has disclosure implications under FASB ASC 850.
Reconciling against management’s representation of related parties at each date is the documentation step. Management’s representation letter typically asserts related parties as of the report date. The audit procedure verifies the assertion holds across the period by reconstructing the related-party graph at each balance-sheet date and comparing.
Worked example
The companion repository ships a synthetic 100-entity ownership graph spanning 2022-2025 with 15 seeded ownership-change events: 5 acquisitions (with trigger_type: share_purchase), 3 divestitures, 4 gradual share transfers across multiple events, 2 corporate reorganizations, and 1 BOI correction event. Each event has a filing_reference linking to a synthetic BOI filing identifier.
AS-OF queries reconstruct ownership at year-end 2022, 2023, and 2024. The reconstructions correctly show the entity ownership state as it existed on each date, including the multi-event gradual transfers (where ownership transitions through intermediate percentages across multiple filings). The ownership-change-event traversal correctly identifies all 15 events as the chronological audit trail across the period.
The benchmark also demonstrates the filing-trigger-detection pattern: the synthetic data set has 3 events without corresponding filing references (representing the BOI non-compliance findings the methodology is designed to catch); the query correctly identifies all 3.
Operational integration
Temporal-graph operations add three workpaper artifacts beyond the static-graph case. The schema-design documentation records the time-bounded-edge convention (the valid_from/valid_to/null semantics) and the ControlChange-event modeling pattern. The AS-OF query library records the parameterized queries for each procedure (beneficial-ownership reconstruction, related-party clustering, exposure-trajectory calculation). The filing-reconciliation log records the matching of observed ownership-change events to the corresponding regulatory filings, with any discrepancies flagged for inquiry.
Temporal graphs add real complexity to the schema-design and query-implementation layers. They are not appropriate for every engagement — a single-period DD with no regulatory continuing-reporting overlay can use the static-graph apparatus from earlier articles in this sub-series unchanged. They become essential when (a) the engagement spans multiple periods, (b) the counterparty universe includes BOI reporting companies in scope after the March 2025 IFR, or (c) the OFAC exposure analysis needs trajectory data rather than point-in-time. When any of those three conditions apply, the temporal extension pays for its complexity.
The forthcoming Graph-Based Wash-Sale and Layering Detection article in this sub-series carries the temporal pattern into securities-transaction graphs where the time dimension is the diagnostic, not the convenience — wash-sale detection under IRC §1091 requires the 30-day window check, and layering detection under the FATF typology relies on inter-hop time-window analysis.
References
Temporal graph theory:
- Holme, P., & Saramäki, J. (2012). “Temporal Networks.” Physics Reports, 519(3), 97-125.
- Kostakos, V. (2009). “Temporal Graphs.” Physica A: Statistical Mechanics and its Applications, 388(6), 1007-1023.
- Snodgrass, R. T. (2000). Developing Time-Oriented Database Applications in SQL. Morgan Kaufmann.
Regulatory framework:
- FinCEN (2022). Beneficial Ownership Information Reporting Rule, 31 CFR §1010.380.
- FinCEN (2025). Beneficial Ownership Information Reporting — Interim Final Rule. (March 2025 IFR narrowing BOI scope.)
- FinCEN (2024). Beneficial Ownership Information Reporting Updates and Corrections FAQ.
Audit and accounting standards:
- PCAOB AS 2410 — Related Parties.
- PCAOB AS 2110 — Identifying and Assessing Risks of Material Misstatement.
- FASB ASC 805 — Business Combinations.
- FASB ASC 850 — Related Party Disclosures.
Implementation reference:
- Neo4j Temporal Functions Documentation —
date(),datetime(),duration(), temporal-property indexing. - Neo4j Cypher Manual — relationship-property indexes, range scans on temporal properties.
Reproducible code: Companion repository at github.com/noahrgreen/dd-tech-lab-companion ships the temporal-graph toolkit: schema migration for time-bounded edges, the AS-OF query library across ownership / officer-role / address-overlap relationships, the ControlChange-event node pattern with FinCEN BOI filing-reference linkage, and a synthetic 4-year ownership-graph generator with seeded change events for benchmark testing.
