FollowTheMoney (FTM) Data¶
Aletheia has first-class support for FollowTheMoney data format used by OpenSanctions and investigative journalism tools.
What is FTM?¶
FollowTheMoney is a data model for representing entities and relationships in investigative contexts:
- Entities: People, Organizations, Companies, Assets
- Relationships: Ownership, Directorship, Family ties
- Metadata: Sanctions, Programs, Authorities
File Format¶
FTM data is stored as JSON Lines (.ftm.json):
{"id": "NK-abc123", "schema": "Person", "properties": {"name": ["John Doe"]}}
{"id": "NK-def456", "schema": "Sanction", "properties": {"entity": ["NK-abc123"]}}
FTM Parser Features¶
ID Resolution¶
FTM entities reference each other by ID. The parser resolves these automatically:
# Without resolution:
"This is a sanction against NK-c6rsgFRyrcFxF2xZdx4uq4"
# With resolution (default):
"This is a sanction against al-Mulathamun Battalion"
Reference properties resolved:
entity(Sanction target)owner,asset(Ownership)director,organization(Directorship)holder,person,relative,associate
Supported Schemas¶
| Schema | Description |
|---|---|
Person | Individuals |
Organization | Groups, NGOs |
Company | Corporate entities |
Sanction | Sanction designations |
Ownership | Asset ownership |
Directorship | Board positions |
Family | Family relationships |
Associate | Business associations |
Episode Builder¶
The FTM episode builder creates markdown optimized for entity extraction:
# FollowTheMoney Entity: al-Shabaab
## Entity Metadata
- **Schema Type**: Organization
- **Status**: Target of investigation
## Properties
- **Alias**: al-Hijra
- **Program Id**: US-FTO219
- **Topics**: sanction, crime.terror
## Entity Context
This is an organization entity representing al-Shabaab.
Creating an FTM Use Case¶
# use_cases/my_case/__init__.py
from use_cases.anticorruption.parser import FTMParser, FTMEntity
from aletheia.core.ontology import GenericOntologyLoader
from aletheia.core.episodes import register_episode_builder
from use_cases.anticorruption.episode_builder import build_ftm_episode_content
Parser = FTMParser
Ontology = GenericOntologyLoader
register_episode_builder(
"my_case",
build_ftm_episode_content,
source_description="OpenSanctions data",
)
Data Sources¶
- OpenSanctions - Sanctions and PEP data
- OCCRP Aleph - Investigative data