Skip to main content

The Taxonomy

Market Motion’s taxonomy is a hierarchical ontology that organizes all market-relevant information. It’s what makes our data machine-readable rather than just searchable.

Structure

Category
└── Subcategory
    └── Entity Type
        └── Entity
            ├── Attributes
            ├── Relationships
            └── Market Exposures

Categories

Subcategories:
  • presidential - Presidential elections and candidates
  • us-congress - Senators and Representatives
  • governors - State governors
  • international - Foreign leaders and elections
  • legislation - Bills and policy
Entity Types: person, orgExample Entities:
  • Joe Biden (person)
  • Donald Trump (person)
  • Democratic Party (org)

Why a Taxonomy?

vs. Raw Text

Raw TextTaxonomy
”Patrick Mahomes questionable for Sunday”entity.attributes.injury_status = "questionable"
Requires NLP to extractDirectly queryable
Ambiguous meaningsTyped values
No relationshipsExplicit graph

vs. Keyword Tags

Keyword TagsTaxonomy
[“nfl”, “chiefs”, “quarterback”]category: sports, subcategory: nfl, type: person
Flat structureHierarchical
No semanticsTyped relationships
No inferenceTraversable graph

Taxonomy API

Get Subcategories

GET /api/entities/subcategories
Returns:
{
  "categories": [
    {
      "category": "sports",
      "count": 450,
      "subcategories": [
        { "name": "nfl", "count": 200 },
        { "name": "nba", "count": 150 }
      ]
    }
  ]
}

Filter by Taxonomy

# All NFL players
GET /api/entities?category=sports&subcategory=nfl&type=person

# All crypto assets
GET /api/entities?category=crypto&type=asset

# All political organizations
GET /api/entities?category=politics&type=org

Building on the Taxonomy

Portfolio by Category

// Get all entities you're exposed to by category
const sports = await fetch('/api/entities?category=sports&limit=100');
const politics = await fetch('/api/entities?category=politics&limit=100');

// Count market exposures per category
const sportsExposure = sports.entities.reduce(
  (sum, e) => sum + e.marketExposures?.length || 0, 0
);

Category Alerts

// Monitor all entities in a category for attribute changes
const politicians = await fetch('/api/entities?category=politics&type=person');

for (const pol of politicians.entities) {
  if (pol.attributes.approval_rating < 40) {
    console.log(`Low approval: ${pol.displayName}`);
    // Check connected markets
  }
}

Extending the Taxonomy

The taxonomy grows as we add coverage:
1

New Category

Weather, Entertainment, Science
2

New Subcategory

Premier League under Sports
3

New Entity Type

Event type for conferences, games
4

New Attributes

Domain-specific attributes per subcategory
Have a category or entity type you need? Let us know on GitHub.