FollowTheMoney Ontology¶
The FollowTheMoney (FTM) schema is a standard for representing entities and relationships in investigative journalism, anti-corruption research, and sanctions tracking. This page explains its structure and how it's used in the terrorist organizations use case.
What is FollowTheMoney?¶
FollowTheMoney is an open-source data model created by the Organized Crime and Corruption Reporting Project (OCCRP) and maintained as part of the OpenSanctions project. It provides:
- Entity-relationship model for people, companies, and their connections
- Standard properties for names, identifiers, dates, and locations
- Relationship types for ownership, employment, sanctions, and more
- Multi-source integration across jurisdictions and data providers
Origin and Adoption¶
| Year | Milestone |
|---|---|
| 2018 | Created by OCCRP for investigative journalism |
| 2020 | Adopted by OpenSanctions for sanctions data |
| 2022 | Used by Aleph (document processing platform) |
| 2024 | Standard for 240+ sanctions and PEP datasets |
Users: Investigative journalists, compliance teams, law enforcement, intelligence analysts, and researchers worldwide.
Ontology Structure¶
FTM organizes entities in a hierarchy with Thing as the root:
Thing (root)
├── LegalEntity
│ ├── Person
│ ├── Organization
│ │ ├── Company
│ │ └── PublicBody
│ └── Vehicle
│ └── Airplane
├── Asset
│ ├── BankAccount
│ ├── RealEstate
│ ├── Security
│ └── CryptoWallet
├── Document
│ ├── Article
│ ├── Passport
│ └── Email
└── Address
Relationship Classes (Intervals)¶
FTM models relationships as first-class entities:
Interval (relationship base)
├── Ownership (owner → asset)
├── Directorship (director → organization)
├── Employment (employee → employer)
├── Sanction (authority → target)
├── Family (person ↔ relative)
├── Associate (person ↔ associate)
├── Membership (member → organization)
└── Representation (representative → client)
This reification allows relationships to have their own properties (dates, sources, amounts).
Key Classes for Sanctions¶
Person¶
Individuals subject to sanctions or associated with designated entities.
ftm:Person a rdfs:Class ;
rdfs:label "Person" ;
rdfs:comment "A natural person" ;
rdfs:subClassOf ftm:LegalEntity .
Properties: - name, firstName, lastName - birthDate, birthPlace - nationality, country - passportNumber, idNumber - alias (alternative names)
Organization¶
Groups, companies, and formal entities.
ftm:Organization a rdfs:Class ;
rdfs:label "Organization" ;
rdfs:comment "A formal organization" ;
rdfs:subClassOf ftm:LegalEntity .
Properties: - name, alias - country, jurisdiction - classification (type of organization) - topics (e.g., "sanction", "crime.terror")
PublicBody¶
Government agencies and authorities.
ftm:PublicBody a rdfs:Class ;
rdfs:label "Public body" ;
rdfs:comment "A government agency or state-controlled entity" ;
rdfs:subClassOf ftm:Organization .
Used for: - US State Department - UK Home Office - Australia Home Affairs - Other designating authorities
Sanction¶
The designation relationship between authority and target.
ftm:Sanction a rdfs:Class ;
rdfs:label "Sanction" ;
rdfs:comment "A sanction or listing of an entity by an authority" ;
rdfs:subClassOf ftm:Interval .
Properties: - entity (target of sanction) - authority (issuing body) - program (e.g., "US-FTO219", "UK-PROSCRIBED") - startDate, endDate - reason, summary
Class Statistics¶
The full FTM ontology contains:
| Category | Count |
|---|---|
| Entity classes | 60+ |
| Relationship classes | 20+ |
| Properties | 200+ |
Classes Used in Terrorist Orgs¶
| Class | Usage | Count |
|---|---|---|
| Organization | Designated groups | ~294 |
| PublicBody | Designating authorities | 5 |
| Person | Associated individuals | ~5 |
| Address | Headquarters/locations | ~7 |
| Sanction | Designation relationships | ~161 |
Aletheia Extensions¶
The terrorist organizations use case extends FTM with additional relationship types:
HAS_ALIAS Extension¶
FTM stores aliases as properties, but graph queries need traversable relationships:
ftm:HasAlias a rdfs:Class ;
rdfs:label "Has Alias" ;
rdfs:comment "Links an entity to an alternative name" ;
rdfs:subClassOf ftm:Interval .
Enables queries like:
// Find organization by alias
MATCH (org:Organization)-[:HAS_ALIAS]->(a)
WHERE a.name = 'LeT'
RETURN org.name
// → Lashkar-e-Taiba
Extension file: ontology/extensions/aletheia_extensions.ttl
Example Entities¶
Organization with Aliases¶
{
"schema": "Organization",
"id": "org-hamas",
"properties": {
"name": ["Hamas"],
"alias": ["Islamic Resistance Movement", "Harakat al-Muqawama al-Islamiya"],
"country": ["ps"],
"topics": ["sanction", "crime.terror"]
}
}
Graph representation:
(Hamas:Organization)
├──[:HAS_ALIAS]──► (Islamic Resistance Movement:Entity)
├──[:HAS_ALIAS]──► (Harakat al-Muqawama:Entity)
└──[:SANCTION]──► (US State Department:PublicBody)
Multi-Jurisdiction Sanction¶
┌──[:SANCTION]──► (US State Department)
│
(Hizballah) ────────┼──[:SANCTION]──► (UK Home Office)
│
└──[:SANCTION]──► (Australia Home Affairs)
Using FTM in Aletheia¶
Loading the Ontology¶
# Load FTM ontology to graph
aletheia build-ontology-graph \
--use-case terrorist_orgs \
--knowledge-graph ftm_ontology
Building Knowledge Graph¶
aletheia build-knowledge-graph \
--use-case terrorist_orgs \
--knowledge-graph terrorist_orgs \
--schema-mode graph-hybrid \
--ontology-graph ftm_ontology
Viewing the Graph¶
# Count by entity type
redis-cli GRAPH.QUERY terrorist_orgs \
"MATCH (n) RETURN labels(n), count(*) ORDER BY count(*) DESC"
# View sanctions relationships
redis-cli GRAPH.QUERY terrorist_orgs \
"MATCH (org:Organization)-[:SANCTION]->(auth:PublicBody)
RETURN org.name, auth.name LIMIT 10"
Semantic Alignment Examples¶
The ontology enables consistent extraction:
| Source Text | Extracted Entity | Ontology Class |
|---|---|---|
| "terrorist group" | Hamas | Organization |
| "the State Department" | US State Department | PublicBody |
| "also known as" | LeT | HasAlias |
| "designated by" | - | Sanction (relationship) |
| "founder" | Person name | Person |
Benefits for Sanctions Analysis¶
1. Cross-Jurisdiction Queries¶
Single query finds all designations:
MATCH (org:Organization)-[:SANCTION]->(auth:PublicBody)
WHERE org.name CONTAINS 'Hamas'
RETURN auth.name
// → US State Department, UK Home Office, Australia Home Affairs
2. Alias Resolution¶
Find organizations by any known name:
MATCH (org:Organization)-[:HAS_ALIAS]->(a)
WHERE a.name =~ '(?i).*lashkar.*'
RETURN DISTINCT org.name
// → Lashkar-e-Taiba
3. Network Analysis¶
Trace organizational relationships:
MATCH path = (org:Organization)-[:RELATES_TO*1..3]-(related)
WHERE org.name = 'al-Qaeda'
RETURN path
4. Compliance Integration¶
FTM data exports directly to compliance systems: - Standardized entity identifiers - Authority-specific program codes - Machine-readable sanctions lists
Source Files¶
| File | Location | Description |
|---|---|---|
| FTM Ontology | ontology/followthemoney.ttl | Core FTM schema (145 KB) |
| Extensions | ontology/extensions/aletheia_extensions.ttl | HAS_ALIAS relationship |
| Data Files | data/*.ftm.json | FTM JSON Lines format |
Data Sources¶
The terrorist organizations data comes from OpenSanctions:
| Source | Dataset | Entities |
|---|---|---|
| US State Department | Foreign Terrorist Organizations | ~70 |
| UK Home Office | Proscribed Organizations | ~80 |
| Australia Home Affairs | Listed Terrorist Organizations | ~30 |
| Combined (deduplicated) | ~294 |