Hi all,
I’m building a portfolio project on the OpenSanctions bulk data (Databricks, snapshot from 30 October 2026). Part of it rebuilds the ownership walk myself so I can compare it with the sanction.control topic. The match is very close, and I’d like to understand the small gap.
What I did
- Started from every listed entity (topic
sanction). - Followed Ownership links downward, any percentage, any depth.
- Used only current links (no end date, or an end date after the snapshot), following the note in the sanction.control article that an end date on a shareholding stops the chain.
What I found
- 29,150 companies carry
sanction.controlwithout being listed themselves. My walk reaches 29,083 of them (99.8%). - 67 are tagged but not reached, and all 67 can only be reached through links that have an end date.
- The ended links are 16 shareholdings from the Russian EGRUL registry, all with full end dates: 5 ended between 2022 and 2025, and 11 in July 2026.
- 12 of the 14 companies directly below those ended links still carry the tag.
- 66 of the 67 are part of, or owned through, a pair of companies that own each other (A owns part of B, B owns part of A).
- I checked one on the live site: it still shows the tag next to the ended shareholdings, with data from late October, so it doesn’t look like a timing issue.
My guess (please correct me)
Listed owner --x--> A (stake ended)
A <--> B (A and B own each other)
B ---> C (C still tagged)
If tagged companies pass the tag on to what they own, a pair that owns each other could keep both companies tagged after the link from the listed owner has ended: A keeps B tagged, and B keeps A tagged. My walk starts fresh from listed entities on every run, so a loop can’t keep itself going in my version.
Questions
- Is the tag recomputed from listed entities on each run, or can companies that are already tagged feed it?
- Is this the expected behaviour for ownership loops, or a known edge case?
I’m happy to share the specific entity IDs privately if that helps. Thanks for the data and for the write-up on the new topic.
Edit: corrected the counts. 4 companies I first counted as having no path were old rows in my own table, not an issue in your data.