Skip to content

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

Learn More