Skip to main content

Finding the Principals of a Business

A common KYB and due diligence task is identifying the humans who own or control a business—the officers, owners, and registered agents named in official filings. This guide explains the data model behind that relationship and shows a complete query for surfacing it.


How Principals Are Modeled

In the Enigma data model, LegalEntity can be thought of as an abstract super class. Every legal entity is always associated with one of these two entities:

  • Person — A natural person (individual human).
  • RegisteredEntity — A formally registered business organization (LLC, Corporation, etc.).

Very often the principals who control a business are found on the Registration that is filed with the Secretary of State. Registrations often name specific individuals. In our data model, the relationship between a Person and a Registration is represented by the Role entity — as owner, officer, registered agent, and so on. Each Role points back to a LegalEntity, and you can tell whether that entity is a person by checking whether legalEntityType is "Person".

The query path is:

Brand → legalEntities → registeredEntities → registrations → roles → legalEntities → names

The extra registeredEntities hop reflects the data model: LegalEntity is abstract. The concrete subtype RegisteredEntity is what the SoS filings (registrations) is connected to. A LegalEntity that is a natural person has no registeredEntity associated with it — that (plus the 'legalEntityType==Person') is how you know it is a Person rather than a RegisteredEntity (e.g. Corporation, LLC, etc.).


Tier Requirements

StepFieldTier Required
Brand → Legal EntitieslegalEntitiesCore
Legal Entity → Registered EntitiesregisteredEntitiesPremium
Registered Entity → RegistrationsregistrationsPremium
Registration → RolesrolesPlus
Role → Legal Entities (persons)legalEntitiesCore

You need at minimum Plus + Premium tiers to traverse this full path.


Query: Find Principals of a Business

The query below searches for a brand by name and location, then traverses to its domestic registrations to surface the roles and the persons named in them.

Request
query FindBusinessPrincipals {
search(searchInput: {
name: "Joe's Pizza"
address: { city: "Brooklyn", state: "NY" }
entityType: BRAND
conditions: { limit: 1 }
}) {
... on Brand {
id
names(first: 1) {
edges {
node {
name
}
}
}
legalEntities(first: 5) {
edges {
node {
names(first: 1) {
edges {
node {
name
legalEntityType
}
}
}
registeredEntities(first: 3) {
edges {
node {
registrations(
first: 5
conditions: {
filter: { EQ: ["jurisdictionType", "domestic"] }
orderBy: ["issueDate DESC"]
}
) {
edges {
node {
registeredName
registrationState
status
subStatus
roles(first: 20) {
edges {
node {
jobTitle
jobFunction
legalEntities(first: 1) {
edges {
node {
names(first: 1) {
edges {
node {
name
legalEntityType
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}

Reading the Response

Each role node in the response represents a person or entity named in an SoS filing. To identify the individual:

  • jobTitle — the role title as listed in the filing (e.g., "Registered Agent", "President", "Member")
  • jobFunction — a normalized job function (e.g., "Accounting", "Operations")
  • legalEntities[].names[].name — the name of the legal entity performing this role
  • legalEntities[].names[].legalEntityType"Person" means this is a natural person; any other value (e.g., "LLC") means a business entity holds the role
Filtering to natural persons only

To limit results to natural persons, filter on legalEntityType:

roles(
first: 20
conditions: {
filter: { EQ: ["legalEntities.names.legalEntityType", "Person"] }
}
)