Follow the Money (FtM) Documentation
website·Indexed 33 days ago
https://followthemoney.techDocumentation for the Follow the Money (FtM) data model, featuring a comprehensive set of schemata for entities like LegalEntity, BankAccount, and Territory, and a Python API for handling types such as EmailType, AddressType, and IdentifierType. It includes specifications for graph and timeline implementations, as well as the Statement data model using the followthemoney.statement.statement.Statement class.
What's inside Follow the Money
- FollowTheMoney (FtM) is a specialized data model designed for financial crime investigations and document forensics. It provides standardized definitions for entities (such as people and companies) and documents used as evidence, allowing these entities to reference each other to create a relationship graph. Beyond the ontology, FtM provides tools for generating, validating, and exporting this structured data.
Overview of default FollowTheMoney entity schemata
FollowTheMoney ships with a default data model containing 71 schemata tailored for financial crime, corruption investigations, and document forensics. These schemata define the types of entities that can be represented in the system, ranging from people and organizations to financial instruments and legal documents.Commonly used entity schemata include:
- Person, Organization, LegalEntity, PublicBody
- BankAccount, CryptoWallet, Payment, Asset
- Address, Territory
- Document, Page, Article, Email, Message
- Contract, ContractAward, Directorship, Employment
- Passport, Identification
- Vehicle, Vessel, Airplane
Overview of FollowTheMoney Mappings
Mappings are YAML files used to project structured data from tabular sources (CSV files using UTF-8 encoding) or SQL databases into FollowTheMoney entities. To execute a mapping, theftmcommand-line utility is required. When using SQL as a source, users can perform JOINs within the database during the mapping process.Overview of the Email property type
Theemailproperty type is used for internet mail addresses (e.g., user@example.com). It is designed to be matchable and can serve as a pivot point for connecting different entities. In search indexing, all properties of this type are grouped under theemailsgroup.Define a Project entity in the FollowTheMoney schema
TheProjectschema represents an activity carried out by a group of participants. It inherits properties from theThing,Value, andIntervalschemata.Understand the Table schema in FollowTheMoney
TheTableschema represents documents structured into rows and cells, such as CSV files, spreadsheet sheets, or database relations. It inherits properties from theDocumentschema. Note thatTableis a generated schema and should not be created directly by users.Use DateType for ISO 8601 date handling
The
DateTypeclass handles date and time stamps based on ISO 8601. It supports varying degrees of precision, allowing values such as years (2021), year-month (2021-02), full dates (2021-02-16), and timestamps with varying precision (2021-02-16T21,2021-02-16T21:48,2021-02-16T21:48:52).Constraints:
- Timezones must always be UTC.
- Calendar weeks (e.g.,
2021-W7) are not supported. - Date ranges (e.g.,
2021-2024) are not supported.
from followthemoney.types import DateType # Example valid values: # '2021' # '2021-02' # '2021-02-16' # '2021-02-16T21:48:52'Define a Risk designation for an entity
TheRiskschema is used to attach a risk designation to an entity by an authority. Unlike aSanction, which represents a legally binding restriction, aRiskdesignation flags heightened exposure or scrutiny. It inherits properties from theIntervalschema, allowing it to be tracked over time.Understand the Page schema constraints
ThePageschema is a generated and hidden schema. It is designed to be managed by the system and should not be created directly by users, nor should it be displayed in user interfaces.Understand the Occupancy schema
TheOccupancyschema represents the occupation of a position by a person for a specific period of time. It is used to model the relationship between a person and a role/position over a duration. In graph representations,Occupancyshould be implemented as an edge.Use the Identifier property type for entity registration codes
The
identifierproperty type is used for registration numbers and codes assigned by an authority to identify an entity, such as tax identifiers or statistical codes. Identifiers are considered 'matchable' (suitable for entity matching) and 'pivot' (suitable for connecting entities).Note: Only model numbers as identifiers if they are long enough to be meaningful; short industry classifiers (e.g., 4-5 digits) are discouraged as they create too much noise.
Understand the Person schema for natural persons
ThePersonschema represents a natural person (as opposed to a corporation). It is designated as a matchable schema, meaning it is specifically designed to be used for entity matching and cross-referencing across datasets.